从Topdocs中删除重复的文档

时间:2017-02-02 10:28:33

标签: java lucene

我使用的是Lucene 4.10.4

如果我合并两个包含相同文档的TopDoc,则生成的TopDocs包含重复文档。

TopDocs[] array={topDocs1,topDocs2};
TopDocs finalDocs= TopDocs.merge(null,1000,array);

合并时有没有办法删除重复文件?

1 个答案:

答案 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);