IndexSearcher从3.5升级到4.4后返回已删除的文档

时间:2013-08-25 20:12:11

标签: java lucene

在我支持使用分页结果显示搜索的网页应用程序中,我已将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中,如何更正没有删除文档的命中列表的方法,以便检索到的命中数和总命中数是否正确?

1 个答案:

答案 0 :(得分:0)

事实证明我没有正确配置该字段。在Lucene和我的数据库中充当主键的字段需要索引(因此Lucene找到要更新或删除的文档)和存储(所以我拥有每个文档的主键,并可以使用它在数据库中查找。)