上QQ阅读APP看书,第一时间看更新
3.1.4 查询文档索引
QueryParser这个类位于org.apache.lucene.queryparser.classic包,需要引用lucene-queryparser-6.3.0.jar文件。
新建一个测试类来查询索引,得到查询对象。
String defaultField = "title"; String queryString ="test"; Analyzer analyzer = new StandardAnalyzer(); QueryParser parser = new QueryParser(defaultField, analyzer); //用于解析查询语法 //从字符串得到查询对象 Query query = parser.parse(queryString);
调用IndexSearcher.search方法执行搜索后,从IndexSearcher中根据文档编号取出文档对象。
TopDocs hits = searcher.search(query, 10); System.out.println("hits.totalHits:"+ hits.totalHits); for (int j = 0; j < hits.scoreDocs.length; j++) { //根据文档编号取出文档对象 Document hitDoc = searcher.doc(hits.scoreDocs[j].doc); System.out.println(hitDoc.get("title")); //输出文档 }
注意,这里的hits.totalHits和hits.scoreDocs.length的值往往不一样。对于网页搜索来说,hits.totalHits表示索引中总的文档数,而hits.scoreDocs.length表示当前页中实际显示的文档数。
因为倒排索引中只存文档编号,不存全文,所以IndexSearcher.search方法搜出来的结果中只有文档编号序列。但Lucene的索引中不只是有倒排索引,还存储了文档内容,所以可以根据文档编号得到文档对象。