1
0
Эх сурвалжийг харах

use caching scorer when there are multiple collectors, so if they call score as well, it will not be computed again

kimchy 14 жил өмнө
parent
commit
b4467c7d1f

+ 4 - 0
modules/elasticsearch/src/main/java/org/elasticsearch/common/lucene/MultiCollector.java

@@ -21,6 +21,7 @@ package org.elasticsearch.common.lucene;
 
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.search.Collector;
+import org.apache.lucene.search.ScoreCachingWrappingScorer;
 import org.apache.lucene.search.Scorer;
 
 import java.io.IOException;
@@ -40,6 +41,9 @@ public class MultiCollector extends Collector {
     }
 
     @Override public void setScorer(Scorer scorer) throws IOException {
+        if (collectors.length > 0) {
+            scorer = new ScoreCachingWrappingScorer(scorer);
+        }
         collector.setScorer(scorer);
         for (Collector collector : collectors) {
             collector.setScorer(scorer);