一、查询理论

创建查询:构建一个包含了文档域语汇单元文档查询对象。(例:fileName:lucene)

查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档id列表

二、代码分析

实现代码

/**
* Lucene入门
* 查询索引
*/
public class QueryIndex { /**
* 查询索引
* 第一步:创建一个Directory对象,指定索引库的位置
* 第二步:创建一个IndexReader(索引读取)对象,需要指定Directory对象
* 第三步:创建一个IndexSearcher(索引搜索)对象,需要指定IndexReader对象
* 第四步:创建一个TermQuery(域查询)对象,指定查询的域和查询关键词
* 第五步:执行查询
* 第六步:返回查询结果,遍历查询结果并输出
* 第七步:关闭IndexReader对象(关流)
*/
@Test
public void queryIndex() throws Exception { /*第一步:创建一个Directory对象,指定索引库的位置*/
Directory directory = FSDirectory.open(new File("E:\\zhanghaoBF\\luceneSolr\\indexLibrary").toPath());//磁盘(硬盘)上的路径 /*第二步:创建一个IndexReader(索引读取)对象*/
IndexReader indexReader = DirectoryReader.open(directory);//打开索引库(此对象为流对象) /*第三步:创建一个IndexSearcher(索引搜索)对象*/
IndexSearcher indexSearcher = new IndexSearcher(indexReader); /*第四步:创建一个TermQuery(域查询)对象,指定查询的域和查询关键词*/
Query query = new TermQuery(new Term("fileContent", "lucene"));//PS:TermQuery为精准查询 /*第五步:执行查询*/
TopDocs topDocs = indexSearcher.search(query, 2);//根据query搜索,返回评分最高的2条 /*第六步:返回查询结果,遍历查询结果并输出*/
ScoreDoc[] scoreDocs = topDocs.scoreDocs;//PS:注意这里返回的是文档id的数组
for (ScoreDoc scoreDoc : scoreDocs) {
int docId = scoreDoc.doc;//文档ID
Document document = indexSearcher.doc(docId);//对应的文档 String fileName = document.get("fileName");//文件名称
System.out.println(fileName);
String fileSize = document.get("fileSize");//文件大小
System.out.println(fileSize);
String filePath = document.get("filePath");//文件路径
System.out.println(filePath);
System.out.println("----------华丽的分割线----------");
} /*第七步:关闭IndexReader对象(关流)*/
indexReader.close();
}
}

常用的搜索方法

最新文章

  1. chrome中怎么避免最小字体只能为12px
  2. 基于uploadify.js实现多文件上传和上传进度条的显示
  3. [转]SVN版本冲突解决详解
  4. Python 学习笔记四
  5. 1.什么是泛型和C#中泛型在Class上的实现
  6. Android实现ExpandableTextView可扩展TextView
  7. Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
  8. 一步一步自定义SpringMVC参数解析器
  9. c#、sql数据库备份还原
  10. 一,入门基础—— 2. 第一个project项目
  11. IO调度算法研究1
  12. 学Java,是自学还是去培训班学习?
  13. Understanding HBase and BigTable
  14. 三大统计相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数
  15. Python3的string库模板的应用
  16. C++多线程中用临界区控制全局变量的访问冲突问题
  17. Git 将项目(代码)从GitHub上克隆(下载)到本地仓库
  18. 27-java String 之间比较的幺蛾子
  19. JavaScript 模块化简述
  20. C语言进阶之路(三)----野指针的产生原因及解决办法

热门文章

  1. Could not create an acl object: Role '16'
  2. python setup.py install 报错【Project namexxx was given, but was not able to be found.】
  3. YouCompleteMe unavailable: requires Vim compiled with Python 2.x support
  4. dcoker 小应用(一)
  5. jQuery 筛选方法
  6. 如何利用微博客进行seo赚钱营销
  7. windows快速安装linux虚拟机
  8. eslint prettier vetur eslint
  9. Agumaster 增加股票表台账页面
  10. Mysql用户权限控制(5.7以上版本)