项目中如何使用solr(续)--分页
来源:互联网 发布:知画和永琪圆房是哪几 编辑:程序博客网 时间:2024/06/06 20:36
分页对象,我们看一下常见的分页
csdn博客中的分页
博客园博客的分页
开源中国博客分页
基本的分页也就是下面几个字段
当前页(currentPage)
每页显示的记录数(pageSize)
总记录数(totalCount)
返回的数据(datas)
分页对象,参考http://www.devnote.cn/article/42.html
import java.util.List;import java.util.Map;/** * 分页对象 * * @author 程高伟 * @time 2017年5月21日下午8:35:01 */public class Page<T> { /** 每页显示记录数默认为10条 */ public static final int DEFAULT_PAGE_SIZE = 10; /** 当前页码, 从1开始计 */ private int currentPage; /** 每页记录数 */ private int pageSize; /** 总记录数 */ private long totalCount; /** 查询条件 */ private Map<String, Object> conditions; /** 当前页数据 */ private List<?> datas; public Page() { // 默认构造函数 currentPage = 1; pageSize = DEFAULT_PAGE_SIZE; } /** 获取当前页码 */ public int getCurrentPage() { return currentPage; } /** 设置当前页码 */ public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } /** 获取每页显示记录数 */ public int getPageSize() { return pageSize; } /** 设置每页显示记录数 */ public void setPageSize(int pageSize) { this.pageSize = pageSize; } /** 获取查询参数 */ public Map<String, Object> getConditions() { return conditions; } /** 设置查询参数 */ public void setConditions(Map<String, Object> conditions) { this.conditions = conditions; } /** 获取当前页数据 */ public List<?> getDatas() { return datas; } /** 设置当前页数据 */ public void setDatas(List<?> datas) { this.datas = datas; } /** 获取总记录数 */ public long getTotalCount() { return totalCount; } /** 设置总记录数 */ public void setTotalCount(long totalCount) { this.totalCount = totalCount; } /** 获取总页数 */ public long getTotalPages() { if (datas == null || datas.isEmpty()) return 0; long totalPages = totalCount / pageSize; if (totalCount % pageSize != 0) { totalPages++; } return totalPages; } /** 获取从第几条数据开始查询 */ public long getStart() { return (currentPage - 1) * pageSize; } /** 判断是否还有前一页 */ public boolean getHasPrevious() { return currentPage == 1 ? false : true; } /** 判断是否还有后一页 */ public boolean getHasNext() { return (getTotalPages() != 0 && getTotalPages() != currentPage) ? true : false; }}
分页查询方法
public static <T> Page<T> getByPage(Page<T> page) { SolrQuery query = new SolrQuery(); // 发布时间降序排列 query.setSort("createTime", ORDER.desc); // 开始页 query.setStart((int) page.getStart()); // 每页显示条数 query.setRows(page.getPageSize()); if (StringUtils.isBlank(page.getConditions().get("keywords").toString())) { page.getConditions().put("keywords", "*"); query.setHighlight(false);// 开启高亮组件 }else{ // 设置高亮 query.setHighlight(true);// 开启高亮组件 query.addHighlightField("title");// 高亮字段 query.addHighlightField("content");// 高亮字段 query.setHighlightSimplePre("<font color='red'>");// 标记,高亮关键字前缀 query.setHighlightSimplePost("</font>");// 后缀 query.setHighlight(true).setHighlightSnippets(1); // 获取高亮分片数,一般搜索词可能分布在文章中的不同位置,其所在一定长度的语句即为一个片段,默认为1,但根据业务需要有时候需要多取出几个分片。 query.setHighlightFragsize(100);// 每个分片的最大长度,默认为100。适当设置此值,如果太小,高亮的标题可能会显不全;设置太大,摘要可能会太长。 } // 关键字 String keywords =page.getConditions().get("keywords").toString(); query.setQuery("title:" + keywords + "or content:" + keywords + "or author:" + keywords); try { QueryResponse response = client.query(query); List<ArticleSolr> articleList = response.getBeans(ArticleSolr.class); SolrDocumentList docs = response.getResults(); if(query.getHighlight()){ // 获取所有高亮的字段 Map<String, Map<String, List<String>>> highlightMap = response.getHighlighting(); for (int i = 0; i < articleList.size(); ++i) { String id = articleList.get(i).getId(); if (highlightMap.get(id) != null && highlightMap.get(id).get("title") != null) { articleList.get(i).setTitle(highlightMap.get(id).get("title").get(0)); } if (highlightMap.get(id) != null && highlightMap.get(id).get("content") != null) { articleList.get(i).setContent(highlightMap.get(id).get("content").get(0)); } } } page.setDatas(articleList); page.setTotalCount(docs.getNumFound()); } catch (Exception e) { logger.error("从solr根据Page查询分页文档时遇到错误", e); } return page; }
分页测试用例
@Test public void testPage() { Page<?> page = new Page<>(); Map<String, Object> conditions = new HashMap<String, Object>(); conditions.put("keywords", "博客");// 指定关键字keywords page.setConditions(conditions); page.setPageSize(10); page.setCurrentPage(19); Page<?> result = SolrUtil.getByPage(page); System.out.println("总记录数" + result.getTotalCount()); System.out.println("每页显示记录数" + result.getPageSize()); System.out.println("总页数" + result.getTotalPages()); System.out.println("当前页码" + result.getCurrentPage()); System.out.println("从第几条数据开始查询" + result.getStart()); System.out.println("当前页数据" + result.getDatas().size()); System.out.println("有上一页" + result.getHasNext()); System.out.println("有下一页" + result.getHasNext()); Iterator<?> iter = result.getDatas().iterator(); while (iter.hasNext()) { ArticleSolr article = (ArticleSolr) iter.next(); System.out.println(article); } }
阅读全文
0 0
- 项目中如何使用solr(续)--分页
- 项目中如何使用solr
- 项目中如何使用solr
- 项目中如何使用solr(续)--高亮
- Solr-项目中的使用
- solr 的配置和web项目中使用
- solr使用cursorMark做深度分页
- Solr中使用游标进行深度分页查询以提高效率(适用的场景下)
- 如何使用Hive集成Solr?
- solr中fieldValueCache使用场景
- java中solr的使用
- 在项目中使用的实用hibernate 分页
- 使用简单asp分页代码(项目中)
- solr搜索(项目中实现)
- solr项目中添加elasticsearch5.4.0记录
- 如何使用SQL Server2005在web中进行分页
- 通用查询中如何使用新分页标签
- MVC模式中,如何使用AJAX进行分页
- java第一章_运算符_赋值运算符
- 查看CentOS上Apache位置,版本,停止,启动
- 异常处理及try/catch/finally/return 的执行顺序:
- 1 pytorch60分钟入门教程
- __all__暴露接口
- 项目中如何使用solr(续)--分页
- 给事件处理函数传参数
- phpstorm 激活教程地址
- 原型相关的概念
- 信号量的实现
- IDEA Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
- JavaScript 四则运算(加减乘除小数运算)避免损失精度
- JavaScript 函数 eval()
- java第一章_java运算符_比较运算符