您的位置:首页 > 编程语言

lucene功能二:查询索引步骤;及代码示例

2017-11-11 12:43 225 查看

1. 查询索引

1.1. 实现步骤

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

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

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

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

第五步:执行查询。

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

第七步:关闭IndexReader对象

1.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条记录

 

1.3. 代码实现

//查询索引库

@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();

}

1.4. TopDocs

 

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

 

方法或属性
说明
totalHits

匹配搜索条件的总记录数

scoreDocs

顶部匹配记录

 

注意:

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

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

TopDocs.scoreDocs:匹配相关度高的前边记录数组,scoreDocs的长度小于等于search方法指定的参数n
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lucene