Lucene查询索引(简)

1、实现步骤

第一步:创建一个Directory对象,也就是索引库存放的位置。

第二步:创建一个indexReader对象,需要指定Directory对象。

第三步:创建一个indexsearcher对象,需要指定IndexReader对象

第四步:创建一个TermQuery对象,指定查询的域和查询的关键词。

第五步:执行查询。

第六步:返回查询结果。遍历查询结果并输出。

第七步:关闭IndexReader对象

 

2、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条记录

 

3、代码实现

@Test
public void searchIndex() throws IOException {
	//第一步:创建一个Directory对象,也就是索引库存放的位置。
	Directory directory = FSDirectory.open(new File("E:\\eclipse-workspace\\ww_19lucene&solr\\index"));
	//第二步:创建一个indexReader对象,需要指定Directory对象。
	IndexReader indexReader = DirectoryReader.open(directory);
	//第三步:创建一个indexsearcher对象,需要指定IndexReader对象
	IndexSearcher indexSearcher = new IndexSearcher(indexReader);
	//第四步:创建一个TermQuery对象,指定查询的域和查询的关键词。
	TermQuery query = new TermQuery(new Term("fileContent", "apache"));
	//第五步:执行查询。
	TopDocs topDocs = indexSearcher.search(query, 10);
	System.out.println("查询结果总条数:"+topDocs.totalHits);
	//第六步:返回查询结果。遍历查询结果并输出。
	for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
		//获得document的id
		int doc = scoreDoc.doc;
		//根据documentId获得document
		Document document = indexSearcher.doc(doc);
		//输出文件信息:文件名、文件大小、文件路径、文件内容
		System.out.println(document.get("fileName"));
		System.out.println(document.get("filePath"));
		System.out.println(document.get("fileSize"));
		System.out.println(document.get("fileContent"));
		System.out.println("-------------------------------------");
	}
	//第七步:关闭IndexReader对象
	indexReader.close();
}

4、TopDocs

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

 

方法或属性

说明

totalHits

匹配搜索条件的总记录数

scoreDocs

顶部匹配记录

 

注意:

Search方法需要指定匹配记录数量n:indexSearcher.search(query, n)

TopDocs.totalHits:是匹配索引库中所有记录的数量

TopDocs.scoreDocs:匹配相关度高的前边记录数组,scoreDocs的长度小于等于search方法指定的参数n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值