一、需要查询的索引目标文件
二、查询结果
三、IndexSearcher搜索方法
方法 | 说明 |
indexSearcher.search(query, n) | 根据Query搜索,返回评分最高的n条记录 |
indexSearcher.search(query, filter, n) | 根据Query搜索,添加过滤策略,返回评分最高的n条记录 |
indexSearcher.search(query, n, sort) | 根据Query搜索,添加排序策略,返回评分最高的n条记录 |
indexSearcher.search(booleanQuery, filter, n, sort) | 根据Query搜索,添加过滤策略,添加排序策略,返回评分最高的n条记录 |
四、代码
1.第一步:创建一个Directory对象,指定索引库存放的位置
2.第二步:创建一个IndexReader对象,需要指定Directory对象
3.第三步:创建一个IndexSearcher对象,需要指定IndexReader对象
4.第四步:创建一个Query的子类对象,指定查询的域和查询的关键词
5.第五步:执行查询
6.第六步:返回查询结果,遍历查询结果并输出
7.第七步:关闭IndexReader对象
@Test
public void testSearchIndex() throws Exception{
//第一步:创建一个Directory对象,指定索引库存放的磁盘位置
Directory directory = FSDirectory.open(new File("D:\\长期数据\\index"));
//第二步:创建一个IndexReader对象,需要指定Directory对象,打开索引库
IndexReader indexReader = DirectoryReader.open(directory);
//第三步:创建一个IndexSearcher对象,需要指定IndexReader对象
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
//第四步:创建一个TermQuery对象,指定查询的域和查询的关键词
Query query = new TermQuery(new Term("fileContent","spring"));
//第五步:执行查询
TopDocs topDocs = indexSearcher.search(query, 5);
//第六步:返回查询结果,遍历查询结果并输出
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc oneDoc : scoreDocs){
//每一个文档的ID
int doc = oneDoc.doc;
//根据文档ID,搜索具体文档
Document docment = indexSearcher.doc(doc);
//获取文档信息
System.out.println("------------文档打印开始------------");
String fileName = docment.get("fileName");
System.out.println(fileName);
String filePath = docment.get("filePath");
System.out.println(filePath);
String fileSize = docment.get("fileSize");
System.out.println(fileSize);
String fileContent = docment.get("fileContent");
System.out.println(fileContent);
System.out.println("------------文档打印结束------------");
System.out.println();
}
//关闭IndexReader对象
indexReader.close();
}