Lucene查询索引(分页)
分页查询只需传入每页显示记录数和当前页就可以实现分页查询功能
Lucene分页查询是对搜索返回的结果进行分页,而不是对搜索结果的总数量进行分页,因此我们搜索的时候都是返回前n条记录
package cn.mylucene;import java.io.IOException;
import java.nio.file.Paths;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.queryparser.classic.QueryParser.Operator;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.SearcherFactory;
import org.apache.lucene.search.SearcherManager;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.SortField.Type;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;public class SearchIndex {public static void main(String[] args) throws IOException, ParseException { String queryString="title:\"国\""; Analyzer analyzer = new StandardAnalyzer(); //StandardAnalyzer:汉字一个一个字拆分索引IndexSearcher is = getIndexSearcher();QueryParser parser=new QueryParser("", analyzer);parser.setDefaultOperator(Operator.AND);//默认状态下,空格被认为是OR的关系,设置为空格为ANDQuery query = parser.parse(queryString);//排序Sort sort = new Sort(new SortField("dt", Type.LONG, true));TopDocs topDocs = is.search(query, 20,sort);System.out.println("总共匹配多少个:" + topDocs.totalHits);//获取查询结果集ScoreDoc[] hits = topDocs.scoreDocs;int pageSize=5;//每页显示记录数int curPage=2;//当前页//查询起始记录位置int begin = pageSize * (curPage - 1);//查询终止记录位置int end = Math.min(begin + pageSize, hits.length);//遍历结果集for(int i=begin;i<end;i++) {int docID = hits[i].doc;Document document = is.doc(docID);System.out.println(document.get("id")+"-"+document.get("name")+"-"+document.get("dt")+"-"+document.get("title"));}closeIndexSearcher(is); } /** 解决:实现实时搜索功能* 解决:在读取索引文件内容时,索引文件的打开操作IndexSearcher是个非常耗时耗资源的操作* */private static byte[] synchronized_r = new byte[0];private static SearcherManager searcherManager = null;private static IndexSearcher getIndexSearcher() throws IOException {IndexSearcher indexSearcher = null;//保证在同一时刻最多只有一个线程执行该段代码synchronized (synchronized_r) {if(searcherManager == null) {searcherManager = new SearcherManager(FSDirectory.open(Paths.get("E:\\LuceneIndex")), new SearcherFactory());}/** 这个方法同DirectoryReader.openIfChanged(dirReader)效果一样,其实底层还是调用的该方法实现的* DirectoryReader.openIfChanged(dirReader)可以判断当前Reader对象的索引有没有被修改过* 如果索引文件被更新过则重新加载该索引目录* 但是这个时候的重新加载则比单纯的open(indexPath)要高效很多* 它只是重新加载被更新过的文档,而单纯的open则是加载全部的文档* */searcherManager.maybeRefresh();//借用一个IndexSearcher对象的引用,记住该对象用完之后要归还的,有借有还再借不难indexSearcher = searcherManager.acquire();}return indexSearcher;}private static void closeIndexSearcher(IndexSearcher indexSearcher) throws IOException {if(indexSearcher != null) {searcherManager.release(indexSearcher);//归还从SearcherManager处借来的IndexSearcher对象}indexSearcher = null;}
}
转载于:https://www.cnblogs.com/lb809663396/p/5870833.html
Lucene查询索引(分页)相关推荐
- 【示例】Lucene查询索引库编程步骤
Lucene查询索引库编程步骤
- Lucene查询索引代码实现
查询索引 实现步骤 第一步:创建一个Directory对象,也就是索引库存放的位置. 第二步:创建一个indexReader对象,需要指定Directory对象. 第三步:创建一个indexsearc ...
- 搜索引擎学习(三)Lucene查询索引
一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档i ...
- java代码查询索引文件实例_关于使用pdfbox的对PDF文件通过lucene生成索引文件IndexPDFFiles类代码示例...
一.前言 下面通过pdfbox的pdfbox-2.0.9源码中org.apache.pdfbox.examples.lucene.IndexPDFFiles索引PDF文件生成类,基于apache的lu ...
- SolrJ查询索引库
查询索引库 查询步骤 第一步:创建一个SolrServer对象 第二步:创建一个SolrQuery对象 第三步:向SolrQuery中添加查询条件.过滤条件 第四步:执行查询,得到一个Response ...
- Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- lucene两个分页操作
基于lucene两个分页: lucene3.5查询方式(每次查询所有记录,然后取当中部分记录.这样的方式用的最多),lucene官方的解释:因为我们的速度足够快. 处理海量数据时.内存easy内存溢出 ...
- lucene 查询示例_高级Lucene查询示例
lucene 查询示例 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lu ...
- lucene 查询示例_Lucene查询(搜索)语法示例
lucene 查询示例 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lu ...
最新文章
- 关于char[]转换成LPCWSTR的有关问题
- wxWidgets:wxSpinCtrl类用法
- 为什么不建议学python贴吧_为什么那么多自学Python的后来都放弃了,总结下来就这些原因...
- 深入浅出 python epub_《机器学习从认知到实践(第2辑)(套装共3册,Python+TensorFlow)》epub+mobi+azw3...
- Android IPC系列(三):Binder概述
- JavaSpring菜鸟教程,附Java面经
- python求主析取范式_python应用之求主析取范式,主合取范式
- 机房服务器配置方案文件,机房搬迁实施方案模版
- 学习云存储需要了解的一些技术知识
- 体重测试仪软件,一键校准身高体重测量仪
- HM5080E带平衡功能、5V USB输入、8.4V/1.5A两节锂电池充电IC
- WebSphere Application Server V7、V8 和 V8.5 中的高级安全性加强,第 1 部分: 安全性加强的概述和方法...
- simulink官方电机控制示例汇总
- 跑步时戴什么耳机好、推荐几款专业跑步的耳机
- 惠普打印机介质不匹配_打印机提示纸张不匹配该怎么解决?
- 手机互联网的一点看法
- 算法学习 - 模拟滤波器(巴特沃斯、贝塞尔、切比雪夫、椭圆)及IIR滤波器设计
- 应用程序无法启动,错误代码0xc0000142
- linux的账号锁定
- 软件开发怎么对抗抄袭_对抗软件开发中的复杂性