上QQ阅读APP看书,第一时间看更新
3.1.2 查询索引库
用户界面输入的查询词封装成Query对象后,由IndexSearcher执行查找过程。因为往往只需要最相关的一些文档,所以返回结果封装在一个叫作TopDocs的对象中,如图3-3所示。
图3-3 查询原理
查询部分骨干伪代码。
// DirectoryReader读入一个目录下的索引文件 IndexReader ir = DirectoryReader.open(directory); //打开索引库 IndexSearcher searcher = new IndexSearcher(ir); //根据查询词搜索索引库 TopDocs docs = searcher.search(query, 10); //最多返回10个结果 //遍历查询结果 ScoreDoc[] hits = docs.scoreDocs; for (ScoreDoc hit : hits){ //… } //关闭索引库 searcher.close();
调用Searcher接口按关键词搜索后,返回和给定查询最相关的若干个文档以及匹配上的文档总数。TopDocs封装了搜索结果以及匹配上的文档总数。
TopDocs.scoreDocs就是一个封装后的Document的列表。TopDocs主要包含如下两个属性。
public class TopDocs { public int totalHits; // 查询匹配上的文档总数 public ScoreDoc[] scoreDocs; // 命中文档列表顶部的文档 }