소스 검색

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

kimchy 14 년 전
부모
커밋
b4467c7d1f
1개의 변경된 파일4개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      modules/elasticsearch/src/main/java/org/elasticsearch/common/lucene/MultiCollector.java

+ 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);