我使用的是Lucene 4.10.4
如果我合并两个包含相同文档的TopDoc,则生成的TopDocs包含重复文档。
TopDocs[] array={topDocs1,topDocs2};
TopDocs finalDocs= TopDocs.merge(null,1000,array);
合并时有没有办法删除重复文件?
答案 0 :(得分:0)
如果我们做出假设,那些重复的文档就是具有相同docId
的文档,而不是以下代码可以帮助您:
final TopDocs merge = TopDocs.merge(1000, new TopDocs[]{topDocs1, topDocs2});
Set<ScoreDoc> scoreDocs = new TreeSet<>(new Comparator<ScoreDoc>() {
@Override
public int compare(ScoreDoc o1, ScoreDoc o2) {
return Integer.compare(o1.doc, o2.doc);
}
});
float maxScore = Float.MIN_VALUE;
for (int i = 0; i < merge.scoreDocs.length; ++i) {
final ScoreDoc[] scoreDocs1 = merge.scoreDocs;
scoreDocs.add(scoreDocs1[i]);
if (scoreDocs1[i].score > maxScore) {
maxScore = scoreDocs1[i].score;
}
}
final TopDocs filteredTopDocs = new TopDocs(scoreDocs.size(), scoreDocs.toArray(new ScoreDoc[0]), maxScore);