Scan Search: Take track_scores into account, if set, return also scores per doc when scanning, closes #1139.

This commit is contained in:
kimchy 2011-07-20 23:10:41 +03:00
parent c3124efe51
commit d9cea9bd64
1 changed files with 9 additions and 3 deletions

View File

@ -204,7 +204,7 @@ public class QueryPhase implements SearchPhase {
} }
topDocs = countCollector.topDocs(); topDocs = countCollector.topDocs();
} else if (searchContext.searchType() == SearchType.SCAN) { } else if (searchContext.searchType() == SearchType.SCAN) {
ScanCollector scanCollector = new ScanCollector(searchContext.from(), searchContext.size()); ScanCollector scanCollector = new ScanCollector(searchContext.from(), searchContext.size(), searchContext.trackScores());
try { try {
searchContext.searcher().search(query, scanCollector); searchContext.searcher().search(query, scanCollector);
} catch (ScanCollector.StopCollectingException e) { } catch (ScanCollector.StopCollectingException e) {
@ -259,13 +259,18 @@ public class QueryPhase implements SearchPhase {
private final ArrayList<ScoreDoc> docs; private final ArrayList<ScoreDoc> docs;
private final boolean trackScores;
private Scorer scorer;
private int docBase; private int docBase;
private int counter; private int counter;
ScanCollector(int from, int size) { ScanCollector(int from, int size, boolean trackScores) {
this.from = from; this.from = from;
this.to = from + size; this.to = from + size;
this.trackScores = trackScores;
this.docs = new ArrayList<ScoreDoc>(size); this.docs = new ArrayList<ScoreDoc>(size);
} }
@ -274,11 +279,12 @@ public class QueryPhase implements SearchPhase {
} }
@Override public void setScorer(Scorer scorer) throws IOException { @Override public void setScorer(Scorer scorer) throws IOException {
this.scorer = scorer;
} }
@Override public void collect(int doc) throws IOException { @Override public void collect(int doc) throws IOException {
if (counter >= from) { if (counter >= from) {
docs.add(new ScoreDoc(docBase + doc, 0f)); docs.add(new ScoreDoc(docBase + doc, trackScores ? scorer.score() : 0f));
} }
counter++; counter++;
if (counter >= to) { if (counter >= to) {