在我支持使用分页结果显示搜索的网页应用程序中,我已将Lucene从版本3.5升级到4.4。现在IndexSearcher.search
在我搜索文档时返回已删除的文档:
TopDocs results = searcher.search(query, filter, pageStart + pageSize);
int totalCount = results.totalHits;
ScoreDoc[] hits = results.scoreDocs;
int pageEnd = Math.min(results.totalHits, pageStart + pageSize);
List<Long> rowIdList = new ArrayList<Long>(Math.max(pageEnd - pageStart, 0));
for (int i = pageStart; i < pageEnd; i++) {
Document doc = searcher.doc(hits[i].doc);
rowIdList.add(Long.parseLong(doc.get("rowid")));
}
结果我在rowIdList
中有重复的行ID,导致以后出现问题。我现在添加了代码以从rowIdList
中删除重复项。除了显示总匹配次数(通常太高)之外,这种方法有效。此外,搜索结果页面通常显示的匹配次数少于应有的值。
在Lucene 4.4中,如何更正没有删除文档的命中列表的方法,以便检索到的命中数和总命中数是否正确?
答案 0 :(得分:0)
事实证明我没有正确配置该字段。在Lucene和我的数据库中充当主键的字段需要索引(因此Lucene找到要更新或删除的文档)和存储(所以我拥有每个文档的主键,并可以使用它在数据库中查找。)