2017-02-02 4 views
0

I Lucene 4.10.4Entfernen Sie doppelte Dokumente aus Topdocs

bin mit

Wenn ich zwei TopDocs fusionieren einige gleichen Dokumente enthält, enthält die resultierenden TopDocs doppelte Dokumente.

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

Gibt es eine Möglichkeit, doppelte Dokumente während der Zusammenführung zu entfernen?

+0

wie wollen Sie Duplikate entfernen? welches von 2 Duplikaten sollte bleiben? mit Höchstpunktzahl? oder Minimum? – Mysterion

+0

Scoring spielt keine Rolle. Weil ich die Dokumente basierend auf der Indexzeit sortieren werde. So können alle Dokumente entfernt werden. Entweder Maximum oder Minimum. – hariii

Antwort

0

Wenn wir eine Annahme machen, dass Dokumente dupliziert die Dokumente, die gleiche docId haben, als folgende Code sollte Ihnen helfen:

 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); 
Verwandte Themen