結果のページ表示による検索をサポートする 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")));
}
その結果、rowIdList
後で問題を引き起こす行 ID が重複しています。から重複を削除するコードを追加しましたrowIdList
。通常は多すぎる合計一致数の表示を除いて、これは機能します。さらに、検索結果のページには、本来よりも少ない一致が表示されることがよくあります。
Lucene 4.4 で、検索されたヒット数と総ヒット数が正しくなるように、ドキュメントを削除せずにヒット リストを作成する方法を修正するにはどうすればよいですか?