0

在我的 Web 应用程序支持搜索结果的分页显示,我已将 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")));
}

结果,我有重复的行 ID 会rowIdList导致以后出现问题。我现在添加了代码以从rowIdList. 除了显示总匹配数(通常太高)外,这很有效。此外,搜索结果的页面通常显示的匹配项少于应有的匹配项。

在 Lucene 4.4 中,如何更正创建没有删除文档的命中列表的方法,以使检索到的命中数和总命中数正确?

4

1 回答 1

0

事实证明,我没有正确配置该字段。在 Lucene 和我的数据库中用作主键的字段都需要被索引(以便 Lucene 找到要更新或删除的文档)和存储(所以我有每个文档的主键并可以将其用于查找在数据库中)。

于 2013-10-04T12:44:05.690 回答