zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Lucene查询索引代码实现

索引代码 实现 查询 Lucene
2023-09-14 09:02:01 时间
  • 查询索引

  • 实现步骤

第一步:创建一个Directory对象,也就是索引库存放的位置。
第二步:创建一个indexReader对象,需要指定Directory对象。
第三步:创建一个indexsearcher对象,需要指定IndexReader对象
第四步:创建一个TermQuery对象,指定查询的域和查询的关键词。
第五步:执行查询。
第六步:返回查询结果。遍历查询结果并输出。
第七步:关闭IndexReader对象

  • IndexSearcher搜索方法
    在这里插入图片描述
  • 代码实现
//查询索引库
@Test
public void searchIndex() throws Exception {
	//指定索引库存放的路径
	//D:\temp\0108\index
	Directory directory = FSDirectory.open(new File("D:\\temp\\0108\\index"));
	//创建indexReader对象
	IndexReader indexReader = DirectoryReader.open(directory);
	//创建indexsearcher对象
	IndexSearcher indexSearcher = new IndexSearcher(indexReader);
	//创建查询
	Query query = new TermQuery(new Term("filename", "apache"));
	//执行查询
	//第一个参数是查询对象,第二个参数是查询结果返回的最大值
	TopDocs topDocs = indexSearcher.search(query, 10);
	//查询结果的总条数
	System.out.println("查询结果的总条数:"+ topDocs.totalHits);
	//遍历查询结果
	//topDocs.scoreDocs存储了document对象的id
	for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
		//scoreDoc.doc属性就是document对象的id
		//根据document的id找到document对象
		Document document = indexSearcher.doc(scoreDoc.doc);
		System.out.println(document.get("filename"));
		//System.out.println(document.get("content"));
		System.out.println(document.get("path"));
		System.out.println(document.get("size"));
	}
	//关闭indexreader对象
	indexReader.close();
}
  • TopDocs

Lucene搜索结果可通过TopDocs遍历,TopDocs类提供了少量的属性,如下:

在这里插入图片描述

注意:
Search方法需要指定匹配记录数量n:indexSearcher.search(query, n)
TopDocs.totalHits:是匹配索引库中所有记录的数量
TopDocs.scoreDocs:匹配相关度高的前边记录数组,scoreDocs的长度小于等于search方法指定的参数n