You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2014/04/04 17:31:02 UTC
svn commit: r1584747 [3/3] - in /lucene/dev/trunk: lucene/
lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/test/org/apache/lucene/index/
lucene/core/src/test/org/apache/lucene/search/
lucene/facet/src/java/org/apache/lucene/facet/ lucene...
Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinCollector.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/ToParentBlockJoinCollector.java Fri Apr 4 15:31:00 2014
@@ -74,7 +74,7 @@ import java.util.*;
*
* @lucene.experimental
*/
-public class ToParentBlockJoinCollector extends Collector {
+public class ToParentBlockJoinCollector extends SimpleCollector {
private final Sort sort;
@@ -269,7 +269,7 @@ public class ToParentBlockJoinCollector
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
currentReaderContext = context;
docBase = context.docBase;
for (int compIDX = 0; compIDX < comparators.length; compIDX++) {
@@ -421,7 +421,7 @@ public class ToParentBlockJoinCollector
}
collector.setScorer(fakeScorer);
- collector.setNextReader(og.readerContext);
+ collector.getLeafCollector(og.readerContext);
for(int docIDX=0;docIDX<numChildDocs;docIDX++) {
//System.out.println("docIDX=" + docIDX + " vs " + og.docs[slot].length);
final int doc = og.docs[slot][docIDX];
Modified: lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java (original)
+++ lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java Fri Apr 4 15:31:00 2014
@@ -47,6 +47,7 @@ import org.apache.lucene.index.SortedSet
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Collector;
@@ -58,6 +59,7 @@ import org.apache.lucene.search.MatchAll
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.SimpleCollector;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopScoreDocCollector;
@@ -222,12 +224,9 @@ public class TestJoinUtil extends Lucene
bq.add(joinQuery, BooleanClause.Occur.SHOULD);
bq.add(new TermQuery(new Term("id", "3")), BooleanClause.Occur.SHOULD);
- indexSearcher.search(bq, new Collector() {
+ indexSearcher.search(bq, new SimpleCollector() {
boolean sawFive;
@Override
- public void setNextReader(AtomicReaderContext context) {
- }
- @Override
public void collect(int docID) {
// Hairy / evil (depends on how BooleanScorer
// stores temporarily collected docIDs by
@@ -239,9 +238,6 @@ public class TestJoinUtil extends Lucene
}
}
@Override
- public void setScorer(Scorer scorer) {
- }
- @Override
public boolean acceptsDocsOutOfOrder() {
return true;
}
@@ -407,7 +403,7 @@ public class TestJoinUtil extends Lucene
// Need to know all documents that have matches. TopDocs doesn't give me that and then I'd be also testing TopDocsCollector...
final FixedBitSet actualResult = new FixedBitSet(indexSearcher.getIndexReader().maxDoc());
final TopScoreDocCollector topScoreDocCollector = TopScoreDocCollector.create(10, false);
- indexSearcher.search(joinQuery, new Collector() {
+ indexSearcher.search(joinQuery, new SimpleCollector() {
int docBase;
@@ -418,9 +414,9 @@ public class TestJoinUtil extends Lucene
}
@Override
- public void setNextReader(AtomicReaderContext context) {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
docBase = context.docBase;
- topScoreDocCollector.setNextReader(context);
+ topScoreDocCollector.getLeafCollector(context);
}
@Override
@@ -572,7 +568,7 @@ public class TestJoinUtil extends Lucene
}
final Map<BytesRef, JoinScore> joinValueToJoinScores = new HashMap<>();
if (multipleValuesPerDocument) {
- fromSearcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new Collector() {
+ fromSearcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new SimpleCollector() {
private Scorer scorer;
private SortedSetDocValues docTermOrds;
@@ -593,7 +589,7 @@ public class TestJoinUtil extends Lucene
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
docTermOrds = FieldCache.DEFAULT.getDocTermOrds(context.reader(), fromField);
}
@@ -608,7 +604,7 @@ public class TestJoinUtil extends Lucene
}
});
} else {
- fromSearcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new Collector() {
+ fromSearcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new SimpleCollector() {
private Scorer scorer;
private BinaryDocValues terms;
@@ -631,7 +627,7 @@ public class TestJoinUtil extends Lucene
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
terms = FieldCache.DEFAULT.getTerms(context.reader(), fromField, true);
docsWithField = FieldCache.DEFAULT.getDocsWithField(context.reader(), fromField);
}
@@ -675,7 +671,7 @@ public class TestJoinUtil extends Lucene
}
}
} else {
- toSearcher.search(new MatchAllDocsQuery(), new Collector() {
+ toSearcher.search(new MatchAllDocsQuery(), new SimpleCollector() {
private SortedSetDocValues docTermOrds;
private final BytesRef scratch = new BytesRef();
@@ -701,7 +697,7 @@ public class TestJoinUtil extends Lucene
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
docBase = context.docBase;
docTermOrds = FieldCache.DEFAULT.getDocTermOrds(context.reader(), toField);
}
@@ -713,7 +709,7 @@ public class TestJoinUtil extends Lucene
});
}
} else {
- toSearcher.search(new MatchAllDocsQuery(), new Collector() {
+ toSearcher.search(new MatchAllDocsQuery(), new SimpleCollector() {
private BinaryDocValues terms;
private int docBase;
@@ -730,7 +726,7 @@ public class TestJoinUtil extends Lucene
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
terms = FieldCache.DEFAULT.getTerms(context.reader(), toField, false);
docBase = context.docBase;
}
Modified: lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (original)
+++ lucene/dev/trunk/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java Fri Apr 4 15:31:00 2014
@@ -54,6 +54,7 @@ import org.apache.lucene.search.Collecto
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.SimpleCollector;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.store.RAMDirectory; // for javadocs
import org.apache.lucene.util.ArrayUtil;
@@ -532,7 +533,7 @@ public class MemoryIndex {
IndexSearcher searcher = createSearcher();
try {
final float[] scores = new float[1]; // inits to 0.0f (no match)
- searcher.search(query, new Collector() {
+ searcher.search(query, new SimpleCollector() {
private Scorer scorer;
@Override
@@ -550,8 +551,6 @@ public class MemoryIndex {
return true;
}
- @Override
- public void setNextReader(AtomicReaderContext context) { }
});
float score = scores[0];
return score;
Modified: lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/EarlyTerminatingSortingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/EarlyTerminatingSortingCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/EarlyTerminatingSortingCollector.java (original)
+++ lucene/dev/trunk/lucene/misc/src/java/org/apache/lucene/index/sorter/EarlyTerminatingSortingCollector.java Fri Apr 4 15:31:00 2014
@@ -21,9 +21,11 @@ import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.CollectionTerminatedException;
import org.apache.lucene.search.Collector;
-import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.FilterLeafCollector;
+import org.apache.lucene.search.FilterCollector;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocsCollector;
import org.apache.lucene.search.TotalHitCountCollector;
@@ -32,11 +34,11 @@ import org.apache.lucene.search.TotalHit
* A {@link Collector} that early terminates collection of documents on a
* per-segment basis, if the segment was sorted according to the given
* {@link Sort}.
- *
+ *
* <p>
* <b>NOTE:</b> the {@code Collector} detects sorted segments according to
* {@link SortingMergePolicy}, so it's best used in conjunction with it. Also,
- * it collects up to a specified {@code numDocsToCollect} from each segment,
+ * it collects up to a specified {@code numDocsToCollect} from each segment,
* and therefore is mostly suitable for use in conjunction with collectors such as
* {@link TopDocsCollector}, and not e.g. {@link TotalHitCountCollector}.
* <p>
@@ -58,26 +60,21 @@ import org.apache.lucene.search.TotalHit
* the old and the new {@code Sort}s have the same identifier, this
* {@code Collector} will incorrectly detect sorted segments.</li>
* </ul>
- *
+ *
* @lucene.experimental
*/
-public class EarlyTerminatingSortingCollector extends Collector {
- /** The wrapped Collector */
- protected final Collector in;
+public class EarlyTerminatingSortingCollector extends FilterCollector {
+
/** Sort used to sort the search results */
protected final Sort sort;
/** Number of documents to collect in each segment */
protected final int numDocsToCollect;
- /** Number of documents to collect in the current segment being processed */
- protected int segmentTotalCollect;
- /** True if the current segment being processed is sorted by {@link #sort} */
- protected boolean segmentSorted;
private int numCollected;
/**
* Create a new {@link EarlyTerminatingSortingCollector} instance.
- *
+ *
* @param in
* the collector to wrap
* @param sort
@@ -88,38 +85,37 @@ public class EarlyTerminatingSortingColl
* hits.
*/
public EarlyTerminatingSortingCollector(Collector in, Sort sort, int numDocsToCollect) {
+ super(in);
if (numDocsToCollect <= 0) {
- throw new IllegalStateException("numDocsToCollect must always be > 0, got " + segmentTotalCollect);
+ throw new IllegalStateException("numDocsToCollect must always be > 0, got " + numDocsToCollect);
}
- this.in = in;
this.sort = sort;
this.numDocsToCollect = numDocsToCollect;
}
@Override
- public void setScorer(Scorer scorer) throws IOException {
- in.setScorer(scorer);
- }
-
- @Override
- public void collect(int doc) throws IOException {
- in.collect(doc);
- if (++numCollected >= segmentTotalCollect) {
- throw new CollectionTerminatedException();
+ public LeafCollector getLeafCollector(AtomicReaderContext context) throws IOException {
+ if (SortingMergePolicy.isSorted(context.reader(), sort)) {
+ // segment is sorted, can early-terminate
+ return new FilterLeafCollector(super.getLeafCollector(context)) {
+
+ @Override
+ public void collect(int doc) throws IOException {
+ super.collect(doc);
+ if (++numCollected >= numDocsToCollect) {
+ throw new CollectionTerminatedException();
+ }
+ }
+
+ @Override
+ public boolean acceptsDocsOutOfOrder() {
+ return false;
+ }
+
+ };
+ } else {
+ return super.getLeafCollector(context);
}
}
- @Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
- in.setNextReader(context);
- segmentSorted = SortingMergePolicy.isSorted(context.reader(), sort);
- segmentTotalCollect = segmentSorted ? numDocsToCollect : Integer.MAX_VALUE;
- numCollected = 0;
- }
-
- @Override
- public boolean acceptsDocsOutOfOrder() {
- return !segmentSorted && in.acceptsDocsOutOfOrder();
- }
-
}
Modified: lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestEarlyTermination.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestEarlyTermination.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestEarlyTermination.java (original)
+++ lucene/dev/trunk/lucene/misc/src/test/org/apache/lucene/index/sorter/TestEarlyTermination.java Fri Apr 4 15:31:00 2014
@@ -34,6 +34,7 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
@@ -147,9 +148,10 @@ public class TestEarlyTermination extend
Sort different = new Sort(new SortField("ndv2", SortField.Type.LONG));
searcher.search(query, new EarlyTerminatingSortingCollector(collector2, different, numHits) {
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
- super.setNextReader(context);
- assertFalse("segment should not be recognized as sorted as different sorter was used", segmentSorted);
+ public LeafCollector getLeafCollector(AtomicReaderContext context) throws IOException {
+ final LeafCollector ret = super.getLeafCollector(context);
+ assertTrue("segment should not be recognized as sorted as different sorter was used", ret.getClass() == in.getLeafCollector(context).getClass());
+ return ret;
}
});
}
Modified: lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/surround/query/BooleanQueryTst.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/surround/query/BooleanQueryTst.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/surround/query/BooleanQueryTst.java (original)
+++ lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/surround/query/BooleanQueryTst.java Fri Apr 4 15:31:00 2014
@@ -22,13 +22,13 @@ import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Collector;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Query;
-
+import org.apache.lucene.search.SimpleCollector;
import org.apache.lucene.queryparser.surround.parser.QueryParser;
-
import org.junit.Assert;
public class BooleanQueryTst {
@@ -57,7 +57,7 @@ public class BooleanQueryTst {
public void setVerbose(boolean verbose) {this.verbose = verbose;}
- class TestCollector extends Collector { // FIXME: use check hits from Lucene tests
+ class TestCollector extends SimpleCollector { // FIXME: use check hits from Lucene tests
int totalMatched;
boolean[] encountered;
private Scorer scorer = null;
@@ -79,7 +79,7 @@ public class BooleanQueryTst {
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
docBase = context.docBase;
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkOutOfOrderScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkOutOfOrderScorer.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkOutOfOrderScorer.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkOutOfOrderScorer.java Fri Apr 4 15:31:00 2014
@@ -59,7 +59,7 @@ public class AssertingBulkOutOfOrderScor
}
private static void flush(int[] docIDs, float[] scores, int[] freqs, int size,
- FakeScorer scorer, Collector collector) throws IOException {
+ FakeScorer scorer, LeafCollector collector) throws IOException {
for (int i = 0; i < size; ++i) {
scorer.doc = docIDs[i];
scorer.freq = freqs[i];
@@ -69,7 +69,7 @@ public class AssertingBulkOutOfOrderScor
}
@Override
- public boolean score(Collector collector, int max) throws IOException {
+ public boolean score(LeafCollector collector, int max) throws IOException {
if (scorer.docID() == -1) {
scorer.nextDoc();
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkScorer.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkScorer.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingBulkScorer.java Fri Apr 4 15:31:00 2014
@@ -31,8 +31,8 @@ import org.apache.lucene.util.VirtualMet
/** Wraps a Scorer with additional checks */
public class AssertingBulkScorer extends BulkScorer {
- private static final VirtualMethod<BulkScorer> SCORE_COLLECTOR = new VirtualMethod<BulkScorer>(BulkScorer.class, "score", Collector.class);
- private static final VirtualMethod<BulkScorer> SCORE_COLLECTOR_RANGE = new VirtualMethod<BulkScorer>(BulkScorer.class, "score", Collector.class, int.class);
+ private static final VirtualMethod<BulkScorer> SCORE_COLLECTOR = new VirtualMethod<BulkScorer>(BulkScorer.class, "score", LeafCollector.class);
+ private static final VirtualMethod<BulkScorer> SCORE_COLLECTOR_RANGE = new VirtualMethod<BulkScorer>(BulkScorer.class, "score", LeafCollector.class, int.class);
public static BulkScorer wrap(Random random, BulkScorer other) {
if (other == null || other instanceof AssertingBulkScorer) {
@@ -58,7 +58,7 @@ public class AssertingBulkScorer extends
}
@Override
- public void score(Collector collector) throws IOException {
+ public void score(LeafCollector collector) throws IOException {
if (random.nextBoolean()) {
try {
final boolean remaining = in.score(collector, DocsEnum.NO_MORE_DOCS);
@@ -72,7 +72,7 @@ public class AssertingBulkScorer extends
}
@Override
- public boolean score(Collector collector, int max) throws IOException {
+ public boolean score(LeafCollector collector, int max) throws IOException {
return in.score(collector, max);
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingCollector.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/AssertingCollector.java Fri Apr 4 15:31:00 2014
@@ -25,46 +25,42 @@ import org.apache.lucene.index.AtomicRea
/** Wraps another Collector and checks that
* acceptsDocsOutOfOrder is respected. */
-public class AssertingCollector extends Collector {
+public class AssertingCollector extends FilterCollector {
public static Collector wrap(Random random, Collector other, boolean inOrder) {
return other instanceof AssertingCollector ? other : new AssertingCollector(random, other, inOrder);
}
final Random random;
- final Collector in;
final boolean inOrder;
- int lastCollected;
AssertingCollector(Random random, Collector in, boolean inOrder) {
+ super(in);
this.random = random;
- this.in = in;
this.inOrder = inOrder;
- lastCollected = -1;
}
@Override
- public void setScorer(Scorer scorer) throws IOException {
- in.setScorer(AssertingScorer.getAssertingScorer(random, scorer));
- }
+ public LeafCollector getLeafCollector(AtomicReaderContext context) throws IOException {
+ return new FilterLeafCollector(super.getLeafCollector(context)) {
- @Override
- public void collect(int doc) throws IOException {
- if (inOrder || !acceptsDocsOutOfOrder()) {
- assert doc > lastCollected : "Out of order : " + lastCollected + " " + doc;
- }
- in.collect(doc);
- lastCollected = doc;
- }
+ int lastCollected = -1;
- @Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
- lastCollected = -1;
- }
+ @Override
+ public void setScorer(Scorer scorer) throws IOException {
+ super.setScorer(AssertingScorer.getAssertingScorer(random, scorer));
+ }
+
+ @Override
+ public void collect(int doc) throws IOException {
+ if (inOrder || !acceptsDocsOutOfOrder()) {
+ assert doc > lastCollected : "Out of order : " + lastCollected + " " + doc;
+ }
+ in.collect(doc);
+ lastCollected = doc;
+ }
- @Override
- public boolean acceptsDocsOutOfOrder() {
- return in.acceptsDocsOutOfOrder();
+ };
}
}
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/CheckHits.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/CheckHits.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/CheckHits.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/CheckHits.java Fri Apr 4 15:31:00 2014
@@ -123,7 +123,7 @@ public class CheckHits {
/**
* Just collects document ids into a set.
*/
- public static class SetCollector extends Collector {
+ public static class SetCollector extends SimpleCollector {
final Set<Integer> bag;
public SetCollector(Set<Integer> bag) {
this.bag = bag;
@@ -136,7 +136,7 @@ public class CheckHits {
bag.add(Integer.valueOf(doc + base));
}
@Override
- public void setNextReader(AtomicReaderContext context) {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
base = context.docBase;
}
@Override
@@ -464,7 +464,7 @@ public class CheckHits {
*
* @see CheckHits#verifyExplanation
*/
- public static class ExplanationAsserter extends Collector {
+ public static class ExplanationAsserter extends SimpleCollector {
Query q;
IndexSearcher s;
@@ -508,7 +508,7 @@ public class CheckHits {
exp.isMatch());
}
@Override
- public void setNextReader(AtomicReaderContext context) {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
base = context.docBase;
}
@Override
Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java Fri Apr 4 15:31:00 2014
@@ -249,7 +249,7 @@ public class QueryUtils {
final float maxDiff = 1e-5f;
final AtomicReader lastReader[] = {null};
- s.search(q, new Collector() {
+ s.search(q, new SimpleCollector() {
private Scorer sc;
private Scorer scorer;
private int leafPtr;
@@ -305,7 +305,7 @@ public class QueryUtils {
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
// confirm that skipping beyond the last doc, on the
// previous reader, hits NO_MORE_DOCS
if (lastReader[0] != null) {
@@ -357,7 +357,7 @@ public class QueryUtils {
final int lastDoc[] = {-1};
final AtomicReader lastReader[] = {null};
final List<AtomicReaderContext> context = s.getTopReaderContext().leaves();
- s.search(q,new Collector() {
+ s.search(q,new SimpleCollector() {
private Scorer scorer;
private int leafPtr;
private Bits liveDocs;
@@ -392,7 +392,7 @@ public class QueryUtils {
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
// confirm that skipping beyond the last doc, on the
// previous reader, hits NO_MORE_DOCS
if (lastReader[0] != null) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/BasicAccumulator.java Fri Apr 4 15:31:00 2014
@@ -80,7 +80,7 @@ public class BasicAccumulator extends Va
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.context = context;
for (StatsCollector counter : statsCollectors) {
counter.setNextReader(context);
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java Fri Apr 4 15:31:00 2014
@@ -155,8 +155,8 @@ public class FacetingAccumulator extends
* @throws IOException if there is an error setting the next reader
*/
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
- super.setNextReader(context);
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
+ super.doSetNextReader(context);
for( Map<String,StatsCollector[]> valueList : fieldFacetCollectors.values() ){
for (StatsCollector[] statsCollectorList : valueList.values()) {
for (StatsCollector statsCollector : statsCollectorList) {
@@ -165,7 +165,7 @@ public class FacetingAccumulator extends
}
}
for (FieldFacetAccumulator fa : facetAccumulators) {
- fa.setNextReader(context);
+ fa.getLeafCollector(context);
}
}
@@ -175,7 +175,7 @@ public class FacetingAccumulator extends
* @throws IOException if there is an error setting the next reader
*/
public void setRangeStatsCollectorReaders(AtomicReaderContext context) throws IOException {
- super.setNextReader(context);
+ super.getLeafCollector(context);
for( Map<String,StatsCollector[]> rangeList : rangeFacetCollectors.values() ){
for (StatsCollector[] statsCollectorList : rangeList.values()) {
for (StatsCollector statsCollector : statsCollectorList) {
@@ -192,7 +192,7 @@ public class FacetingAccumulator extends
* @throws IOException if there is an error setting the next reader
*/
public void setQueryStatsCollectorReaders(AtomicReaderContext context) throws IOException {
- super.setNextReader(context);
+ super.getLeafCollector(context);
for( Map<String,StatsCollector[]> queryList : queryFacetCollectors.values() ){
for (StatsCollector[] statsCollectorList : queryList.values()) {
for (StatsCollector statsCollector : statsCollectorList) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java Fri Apr 4 15:31:00 2014
@@ -20,20 +20,14 @@ package org.apache.solr.analytics.accumu
import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
-import org.apache.lucene.search.Collector;
-import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.LeafCollector;
+import org.apache.lucene.search.SimpleCollector;
import org.apache.solr.common.util.NamedList;
/**
* Abstract Collector that manages all StatsCollectors, Expressions and Facets.
*/
-public abstract class ValueAccumulator extends Collector {
-
- /**
- * @param context The context to read documents from.
- * @throws IOException if setting next reader fails
- */
- public abstract void setNextReader(AtomicReaderContext context) throws IOException;
+public abstract class ValueAccumulator extends SimpleCollector {
/**
* Finalizes the statistics within each StatsCollector.
@@ -51,9 +45,4 @@ public abstract class ValueAccumulator e
return true;
}
- @Override
- public void setScorer(Scorer scorer) throws IOException {
- // NOP
- }
-
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java Fri Apr 4 15:31:00 2014
@@ -82,7 +82,7 @@ public class FieldFacetAccumulator exten
* Move to the next set of documents to add to the field facet.
*/
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
if (multiValued) {
setValues = context.reader().getSortedSetDocValues(name);
} else {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java Fri Apr 4 15:31:00 2014
@@ -51,7 +51,7 @@ public class QueryFacetAccumulator exten
* Update the readers of the queryFacet {@link StatsCollector}s in FacetingAccumulator
*/
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
parent.setQueryStatsCollectorReaders(context);
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java Fri Apr 4 15:31:00 2014
@@ -43,7 +43,7 @@ public class RangeFacetAccumulator exten
* Update the readers of the rangeFacet {@link StatsCollector}s in FacetingAccumulator
*/
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
parent.setRangeStatsCollectorReaders(context);
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java Fri Apr 4 15:31:00 2014
@@ -113,7 +113,7 @@ public class AnalyticsStats {
}
if (disi != null) {
- accumulator.setNextReader(context);
+ accumulator.getLeafCollector(context);
int doc = disi.nextDoc();
while( doc != DocIdSetIterator.NO_MORE_DOCS){
// Add a document to the statistics being generated
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java Fri Apr 4 15:31:00 2014
@@ -20,9 +20,11 @@ package org.apache.solr.handler.componen
import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.index.SortedDocValues;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.SimpleCollector;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.FieldCache;
@@ -52,9 +54,12 @@ import org.apache.solr.util.plugin.Plugi
import org.apache.solr.util.plugin.SolrCoreAware;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
+import com.carrotsearch.hppc.IntObjectMap;
import com.carrotsearch.hppc.IntObjectOpenHashMap;
import com.carrotsearch.hppc.IntOpenHashSet;
import com.carrotsearch.hppc.cursors.IntObjectCursor;
+import com.carrotsearch.hppc.cursors.ObjectCursor;
+
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
@@ -210,9 +215,9 @@ public class ExpandComponent extends Sea
}
searcher.search(query, pfilter.filter, collector);
- IntObjectOpenHashMap groups = groupExpandCollector.getGroups();
+ IntObjectMap groups = groupExpandCollector.getGroups();
Iterator<IntObjectCursor> it = groups.iterator();
- Map<String, DocSlice> outMap = new HashMap();
+ Map<String, DocSlice> outMap = new HashMap<>();
BytesRef bytesRef = new BytesRef();
CharsRef charsRef = new CharsRef();
FieldType fieldType = searcher.getSchema().getField(field).getType();
@@ -292,24 +297,21 @@ public class ExpandComponent extends Sea
rb.rsp.add("expanded", expanded);
}
- private class GroupExpandCollector extends Collector {
+ private class GroupExpandCollector implements Collector {
private SortedDocValues docValues;
- private IntObjectOpenHashMap groups;
+ private IntObjectMap<Collector> groups;
private int docBase;
private FixedBitSet groupBits;
private IntOpenHashSet collapsedSet;
- private List<Collector> collectors;
public GroupExpandCollector(SortedDocValues docValues, FixedBitSet groupBits, IntOpenHashSet collapsedSet, int limit, Sort sort) throws IOException {
int numGroups = collapsedSet.size();
- groups = new IntObjectOpenHashMap(numGroups*2);
- collectors = new ArrayList();
+ groups = new IntObjectOpenHashMap<>(numGroups*2);
DocIdSetIterator iterator = groupBits.iterator();
int group = -1;
while((group = iterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
Collector collector = (sort == null) ? TopScoreDocCollector.create(limit, true) : TopFieldCollector.create(sort,limit, false, false,false, true);
groups.put(group, collector);
- collectors.add(collector);
}
this.collapsedSet = collapsedSet;
@@ -317,35 +319,42 @@ public class ExpandComponent extends Sea
this.docValues = docValues;
}
- public IntObjectOpenHashMap getGroups() {
- return this.groups;
- }
-
- public boolean acceptsDocsOutOfOrder() {
- return false;
- }
-
- public void collect(int docId) throws IOException {
- int doc = docId+docBase;
- int ord = docValues.getOrd(doc);
- if(ord > -1 && groupBits.get(ord) && !collapsedSet.contains(doc)) {
- Collector c = (Collector)groups.get(ord);
- c.collect(docId);
+ public LeafCollector getLeafCollector(AtomicReaderContext context) throws IOException {
+ final int docBase = context.docBase;
+ final IntObjectMap<LeafCollector> leafCollectors = new IntObjectOpenHashMap<>();
+ for (IntObjectCursor<Collector> entry : groups) {
+ leafCollectors.put(entry.key, entry.value.getLeafCollector(context));
}
+ return new LeafCollector() {
+
+ @Override
+ public void setScorer(Scorer scorer) throws IOException {
+ for (ObjectCursor<LeafCollector> c : leafCollectors.values()) {
+ c.value.setScorer(scorer);
+ }
+ }
+
+ @Override
+ public void collect(int docId) throws IOException {
+ int doc = docId+docBase;
+ int ord = docValues.getOrd(doc);
+ if(ord > -1 && groupBits.get(ord) && !collapsedSet.contains(doc)) {
+ LeafCollector c = leafCollectors.get(ord);
+ c.collect(docId);
+ }
+ }
+
+ @Override
+ public boolean acceptsDocsOutOfOrder() {
+ return false;
+ }
+ };
}
- public void setNextReader(AtomicReaderContext context) throws IOException {
- this.docBase = context.docBase;
- for(Collector c : collectors) {
- c.setNextReader(context);
- }
+ public IntObjectMap<Collector> getGroups() {
+ return groups;
}
- public void setScorer(Scorer scorer) throws IOException {
- for(Collector c : collectors) {
- c.setScorer(scorer);
- }
- }
}
////////////////////////////////////////////
@@ -372,4 +381,4 @@ public class ExpandComponent extends Sea
throw new RuntimeException(e);
}
}
-}
\ No newline at end of file
+}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java Fri Apr 4 15:31:00 2014
@@ -23,6 +23,7 @@ import java.util.Map;
import java.util.Set;
import com.spatial4j.core.shape.Point;
+
import org.apache.lucene.document.FieldType;
import org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.index.IndexReader;
@@ -30,6 +31,7 @@ import org.apache.lucene.index.StorableF
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.queries.function.valuesource.VectorValueSource;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.ComplexExplanation;
@@ -51,6 +53,7 @@ import org.apache.solr.search.SpatialOpt
import com.spatial4j.core.context.SpatialContext;
import com.spatial4j.core.distance.DistanceUtils;
import com.spatial4j.core.shape.Rectangle;
+
import org.apache.solr.util.SpatialUtils;
@@ -522,14 +525,14 @@ class SpatialDistanceQuery extends Exten
@Override
public void collect(int doc) throws IOException {
spatialScorer.doc = doc;
- if (spatialScorer.match()) delegate.collect(doc);
+ if (spatialScorer.match()) leafDelegate.collect(doc);
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
+ super.doSetNextReader(context);
maxdoc = context.reader().maxDoc();
spatialScorer = new SpatialScorer(context, null, weight, 1.0f);
- super.setNextReader(context);
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java Fri Apr 4 15:31:00 2014
@@ -34,11 +34,15 @@ import org.apache.lucene.index.TermsEnum
import org.apache.lucene.queries.function.FunctionQuery;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
+import org.apache.lucene.search.LeafCollector;
+import org.apache.lucene.search.Collector;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.FieldCache;
+import org.apache.lucene.search.FilterCollector;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.TopFieldCollector;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
@@ -340,7 +344,7 @@ public class CollapsingQParserPlugin ext
IntOpenHashSet boostDocs = getBoostDocs(searcher, this.boosted);
- if(this.min != null || this.max != null) {
+ if (this.min != null || this.max != null) {
return new CollapsingFieldValueCollector(maxDoc,
leafCount,
@@ -436,7 +440,6 @@ public class CollapsingQParserPlugin ext
private SortedDocValues values;
private int[] ords;
private float[] scores;
- private int docBase;
private int maxDoc;
private int nullPolicy;
private float nullScore = -Float.MAX_VALUE;
@@ -489,7 +492,7 @@ public class CollapsingQParserPlugin ext
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.contexts[context.ord] = context;
this.docBase = context.docBase;
}
@@ -546,9 +549,9 @@ public class CollapsingQParserPlugin ext
int currentContext = 0;
int currentDocBase = 0;
int nextDocBase = currentContext+1 < contexts.length ? contexts[currentContext+1].docBase : maxDoc;
- delegate.setNextReader(contexts[currentContext]);
+ leafDelegate = delegate.getLeafCollector(contexts[currentContext]);
DummyScorer dummy = new DummyScorer();
- delegate.setScorer(dummy);
+ leafDelegate.setScorer(dummy);
DocIdSetIterator it = collapsedSet.iterator();
int docId = -1;
int nullScoreIndex = 0;
@@ -571,13 +574,13 @@ public class CollapsingQParserPlugin ext
currentContext++;
currentDocBase = contexts[currentContext].docBase;
nextDocBase = currentContext+1 < contexts.length ? contexts[currentContext+1].docBase : maxDoc;
- delegate.setNextReader(contexts[currentContext]);
- delegate.setScorer(dummy);
+ leafDelegate = delegate.getLeafCollector(contexts[currentContext]);
+ leafDelegate.setScorer(dummy);
}
int contextDoc = docId-currentDocBase;
dummy.docId = contextDoc;
- delegate.collect(contextDoc);
+ leafDelegate.collect(contextDoc);
}
if(delegate instanceof DelegatingCollector) {
@@ -590,7 +593,6 @@ public class CollapsingQParserPlugin ext
private AtomicReaderContext[] contexts;
private SortedDocValues values;
- private int docBase;
private int maxDoc;
private int nullPolicy;
@@ -640,7 +642,7 @@ public class CollapsingQParserPlugin ext
this.fieldValueCollapse.setScorer(scorer);
}
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ public void doSetNextReader(AtomicReaderContext context) throws IOException {
this.contexts[context.ord] = context;
this.docBase = context.docBase;
this.fieldValueCollapse.setNextReader(context);
@@ -660,9 +662,9 @@ public class CollapsingQParserPlugin ext
int currentContext = 0;
int currentDocBase = 0;
int nextDocBase = currentContext+1 < contexts.length ? contexts[currentContext+1].docBase : maxDoc;
- delegate.setNextReader(contexts[currentContext]);
+ leafDelegate = delegate.getLeafCollector(contexts[currentContext]);
DummyScorer dummy = new DummyScorer();
- delegate.setScorer(dummy);
+ leafDelegate.setScorer(dummy);
DocIdSetIterator it = fieldValueCollapse.getCollapsedSet().iterator();
int docId = -1;
int nullScoreIndex = 0;
@@ -689,13 +691,13 @@ public class CollapsingQParserPlugin ext
currentContext++;
currentDocBase = contexts[currentContext].docBase;
nextDocBase = currentContext+1 < contexts.length ? contexts[currentContext+1].docBase : maxDoc;
- delegate.setNextReader(contexts[currentContext]);
- delegate.setScorer(dummy);
+ leafDelegate = delegate.getLeafCollector(contexts[currentContext]);
+ leafDelegate.setScorer(dummy);
}
int contextDoc = docId-currentDocBase;
dummy.docId = contextDoc;
- delegate.collect(contextDoc);
+ leafDelegate.collect(contextDoc);
}
if(delegate instanceof DelegatingCollector) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java Fri Apr 4 15:31:00 2014
@@ -18,21 +18,23 @@
package org.apache.solr.search;
-import org.apache.lucene.index.IndexReader;
+import java.io.IOException;
+
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.Collector;
import org.apache.lucene.search.Scorer;
-
-import java.io.IOException;
+import org.apache.lucene.search.SimpleCollector;
/** A simple delegating collector where one can set the delegate after creation */
-public class DelegatingCollector extends Collector {
+public class DelegatingCollector extends SimpleCollector {
/* for internal testing purposes only to determine the number of times a delegating collector chain was used */
public static int setLastDelegateCount;
protected Collector delegate;
+ protected LeafCollector leafDelegate;
protected Scorer scorer;
protected AtomicReaderContext context;
protected int docBase;
@@ -56,24 +58,26 @@ public class DelegatingCollector extends
@Override
public void setScorer(Scorer scorer) throws IOException {
this.scorer = scorer;
- delegate.setScorer(scorer);
+ if (leafDelegate != null) {
+ leafDelegate.setScorer(scorer);
+ }
}
@Override
public void collect(int doc) throws IOException {
- delegate.collect(doc);
+ leafDelegate.collect(doc);
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.context = context;
this.docBase = context.docBase;
- delegate.setNextReader(context);
+ leafDelegate = delegate.getLeafCollector(context);
}
@Override
public boolean acceptsDocsOutOfOrder() {
- return delegate.acceptsDocsOutOfOrder();
+ return leafDelegate.acceptsDocsOutOfOrder();
}
public void finish() throws IOException {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DocSetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DocSetCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DocSetCollector.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DocSetCollector.java Fri Apr 4 15:31:00 2014
@@ -20,15 +20,16 @@ package org.apache.solr.search;
import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
-import org.apache.lucene.search.Collector;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.SimpleCollector;
import org.apache.lucene.util.FixedBitSet;
/**
*
*/
-public class DocSetCollector extends Collector {
+public class DocSetCollector extends SimpleCollector {
int pos=0;
FixedBitSet bits;
final int maxDoc;
@@ -84,7 +85,7 @@ public class DocSetCollector extends Col
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
this.base = context.docBase;
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java Fri Apr 4 15:31:00 2014
@@ -20,67 +20,70 @@ package org.apache.solr.search;
import java.io.IOException;
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.Collector;
-import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.FilterLeafCollector;
+import org.apache.lucene.search.FilterCollector;
/**
* <p>
- * A wrapper {@link Collector} that throws {@link EarlyTerminatingCollectorException})
+ * A wrapper {@link Collector} that throws {@link EarlyTerminatingCollectorException})
* once a specified maximum number of documents are collected.
* </p>
*/
-public class EarlyTerminatingCollector extends Collector {
+public class EarlyTerminatingCollector extends FilterCollector {
private final int maxDocsToCollect;
- private final Collector delegate;
private int numCollected = 0;
private int prevReaderCumulativeSize = 0;
- private int currentReaderSize = 0;
+ private int currentReaderSize = 0;
/**
* <p>
- * Wraps a {@link Collector}, throwing {@link EarlyTerminatingCollectorException}
+ * Wraps a {@link Collector}, throwing {@link EarlyTerminatingCollectorException}
* once the specified maximum is reached.
* </p>
* @param delegate - the Collector to wrap.
* @param maxDocsToCollect - the maximum number of documents to Collect
- *
+ *
*/
public EarlyTerminatingCollector(Collector delegate, int maxDocsToCollect) {
+ super(delegate);
assert 0 < maxDocsToCollect;
assert null != delegate;
- this.delegate = delegate;
this.maxDocsToCollect = maxDocsToCollect;
}
- /**
- * This collector requires that docs be collected in order, otherwise
- * the computed number of scanned docs in the resulting
- * {@link EarlyTerminatingCollectorException} will be meaningless.
- */
- @Override
- public boolean acceptsDocsOutOfOrder() {
- return false;
- }
-
- @Override
- public void collect(int doc) throws IOException {
- delegate.collect(doc);
- numCollected++;
- if(maxDocsToCollect <= numCollected) {
- throw new EarlyTerminatingCollectorException
- (numCollected, prevReaderCumulativeSize + (doc + 1));
- }
- }
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ public LeafCollector getLeafCollector(AtomicReaderContext context)
+ throws IOException {
prevReaderCumulativeSize += currentReaderSize; // not current any more
currentReaderSize = context.reader().maxDoc() - 1;
- delegate.setNextReader(context);
- }
- @Override
- public void setScorer(Scorer scorer) throws IOException {
- delegate.setScorer(scorer);
+
+ return new FilterLeafCollector(super.getLeafCollector(context)) {
+
+ /**
+ * This collector requires that docs be collected in order, otherwise
+ * the computed number of scanned docs in the resulting
+ * {@link EarlyTerminatingCollectorException} will be meaningless.
+ */
+ @Override
+ public boolean acceptsDocsOutOfOrder() {
+ return false;
+ }
+
+ @Override
+ public void collect(int doc) throws IOException {
+ super.collect(doc);
+ numCollected++;
+ if (maxDocsToCollect <= numCollected) {
+ throw new EarlyTerminatingCollectorException
+ (numCollected, prevReaderCumulativeSize + (doc + 1));
+ }
+ }
+
+ };
}
+
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java Fri Apr 4 15:31:00 2014
@@ -22,6 +22,9 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.queries.function.ValueSourceScorer;
+import org.apache.lucene.search.LeafCollector;
+import org.apache.lucene.search.Collector;
+import org.apache.lucene.search.FilterCollector;
import org.apache.lucene.search.IndexSearcher;
import org.apache.solr.search.function.ValueSourceRangeFilter;
@@ -55,16 +58,16 @@ public class FunctionRangeQuery extends
@Override
public void collect(int doc) throws IOException {
if (doc<maxdoc && scorer.matches(doc)) {
- delegate.collect(doc);
+ leafDelegate.collect(doc);
}
}
@Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
+ protected void doSetNextReader(AtomicReaderContext context) throws IOException {
+ super.doSetNextReader(context);
maxdoc = context.reader().maxDoc();
FunctionValues dv = rangeFilt.getValueSource().getValues(fcontext, context);
scorer = dv.getRangeScorer(context.reader(), rangeFilt.getLowerVal(), rangeFilt.getUpperVal(), rangeFilt.isIncludeLower(), rangeFilt.isIncludeUpper());
- super.setNextReader(context);
}
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/Grouping.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/Grouping.java Fri Apr 4 15:31:00 2014
@@ -342,12 +342,12 @@ public class Grouping {
}
}
- Collector allCollectors = MultiCollector.wrap(collectors.toArray(new Collector[collectors.size()]));
DocSetCollector setCollector = null;
if (getDocSet && allGroupHeadsCollector == null) {
- setCollector = new DocSetDelegateCollector(maxDoc >> 6, maxDoc, allCollectors);
- allCollectors = setCollector;
+ setCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
+ collectors.add(setCollector);
}
+ Collector allCollectors = MultiCollector.wrap(collectors);
CachingCollector cachedCollector = null;
if (cacheSecondPassSearch && allCollectors != null) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Fri Apr 4 15:31:00 2014
@@ -60,6 +60,7 @@ import org.apache.lucene.index.StoredFie
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Collector;
@@ -71,9 +72,11 @@ import org.apache.lucene.search.FieldDoc
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.lucene.search.MultiCollector;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.SimpleCollector;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TermQuery;
@@ -930,17 +933,17 @@ public class SolrIndexSearcher extends I
if (idIter == null) continue;
}
- collector.setNextReader(leaf);
+ final LeafCollector leafCollector = collector.getLeafCollector(leaf);
int max = reader.maxDoc();
if (idIter == null) {
for (int docid = 0; docid<max; docid++) {
if (liveDocs != null && !liveDocs.get(docid)) continue;
- collector.collect(docid);
+ leafCollector.collect(docid);
}
} else {
for (int docid = -1; (docid = idIter.advance(docid+1)) < max; ) {
- collector.collect(docid);
+ leafCollector.collect(docid);
}
}
}
@@ -1526,24 +1529,18 @@ public class SolrIndexSearcher extends I
Collector collector;
if (!needScores) {
- collector = new Collector () {
- @Override
- public void setScorer(Scorer scorer) {
- }
+ collector = new SimpleCollector () {
@Override
public void collect(int doc) {
numHits[0]++;
}
@Override
- public void setNextReader(AtomicReaderContext context) {
- }
- @Override
public boolean acceptsDocsOutOfOrder() {
return true;
}
};
} else {
- collector = new Collector() {
+ collector = new SimpleCollector() {
Scorer scorer;
@Override
public void setScorer(Scorer scorer) {
@@ -1556,9 +1553,6 @@ public class SolrIndexSearcher extends I
if (score > topscore[0]) topscore[0]=score;
}
@Override
- public void setNextReader(AtomicReaderContext context) {
- }
- @Override
public boolean acceptsDocsOutOfOrder() {
return true;
}
@@ -1667,30 +1661,33 @@ public class SolrIndexSearcher extends I
final float[] topscore = new float[] { Float.NEGATIVE_INFINITY };
Collector collector;
- DocSetCollector setCollector;
+ final DocSetCollector setCollector = new DocSetCollector(smallSetSize, maxDoc);
if (!needScores) {
- collector = setCollector = new DocSetCollector(smallSetSize, maxDoc);
+ collector = setCollector;
} else {
- collector = setCollector = new DocSetDelegateCollector(smallSetSize, maxDoc, new Collector() {
+ final Collector topScoreCollector = new SimpleCollector() {
+
Scorer scorer;
+
@Override
- public void setScorer(Scorer scorer) {
- this.scorer = scorer;
- }
- @Override
+ public void setScorer(Scorer scorer) throws IOException {
+ this.scorer = scorer;
+ }
+
+ @Override
public void collect(int doc) throws IOException {
- float score = scorer.score();
- if (score > topscore[0]) topscore[0]=score;
- }
- @Override
- public void setNextReader(AtomicReaderContext context) {
- }
- @Override
+ float score = scorer.score();
+ if (score > topscore[0]) topscore[0] = score;
+ }
+
+ @Override
public boolean acceptsDocsOutOfOrder() {
- return false;
- }
- });
+ return true;
+ }
+ };
+
+ collector = MultiCollector.wrap(setCollector, topScoreCollector);
}
if (terminateEarly) {
collector = new EarlyTerminatingCollector(collector, cmd.len);
@@ -1726,8 +1723,8 @@ public class SolrIndexSearcher extends I
} else {
final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
- DocSetCollector setCollector = new DocSetDelegateCollector(maxDoc>>6, maxDoc, topCollector);
- Collector collector = setCollector;
+ DocSetCollector setCollector = new DocSetCollector(maxDoc>>6, maxDoc);
+ Collector collector = MultiCollector.wrap(topCollector, setCollector);
if (terminateEarly) {
collector = new EarlyTerminatingCollector(collector, cmd.len);
}
@@ -2031,7 +2028,7 @@ public class SolrIndexSearcher extends I
AtomicReaderContext leaf = leafContexts.get(readerIndex++);
base = leaf.docBase;
end = base + leaf.reader().maxDoc();
- topCollector.setNextReader(leaf);
+ topCollector.getLeafCollector(leaf);
// we should never need to set the scorer given the settings for the collector
}
topCollector.collect(doc-base);
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java Fri Apr 4 15:31:00 2014
@@ -29,12 +29,10 @@ import org.apache.lucene.search.TimeLimi
import org.apache.lucene.search.TotalHitCountCollector;
import org.apache.lucene.search.grouping.AbstractAllGroupHeadsCollector;
import org.apache.lucene.search.grouping.term.TermAllGroupHeadsCollector;
-import org.apache.lucene.util.FixedBitSet;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.search.BitDocSet;
import org.apache.solr.search.DocSet;
import org.apache.solr.search.DocSetCollector;
-import org.apache.solr.search.DocSetDelegateCollector;
import org.apache.solr.search.QueryUtils;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.search.SolrIndexSearcher.ProcessedFilter;
@@ -173,14 +171,11 @@ public class CommandHandler {
private DocSet computeDocSet(Query query, ProcessedFilter filter, List<Collector> collectors) throws IOException {
int maxDoc = searcher.maxDoc();
- DocSetCollector docSetCollector;
- if (collectors.isEmpty()) {
- docSetCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
- } else {
- Collector wrappedCollectors = MultiCollector.wrap(collectors.toArray(new Collector[collectors.size()]));
- docSetCollector = new DocSetDelegateCollector(maxDoc >> 6, maxDoc, wrappedCollectors);
- }
- searchWithTimeLimiter(query, filter, docSetCollector);
+ final Collector collector;
+ final DocSetCollector docSetCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
+ List<Collector> allCollectors = new ArrayList<>(collectors);
+ allCollectors.add(docSetCollector);
+ searchWithTimeLimiter(query, filter, MultiCollector.wrap(allCollectors));
return docSetCollector.getDocSet();
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java Fri Apr 4 15:31:00 2014
@@ -17,52 +17,42 @@ package org.apache.solr.search.grouping.
* limitations under the License.
*/
+import java.io.IOException;
+
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.Collector;
-import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.FilterLeafCollector;
import org.apache.solr.search.DocSet;
-import java.io.IOException;
-
/**
* A collector that filters incoming doc ids that are not in the filter.
*
* @lucene.experimental
*/
-public class FilterCollector extends Collector {
+public class FilterCollector extends org.apache.lucene.search.FilterCollector {
private final DocSet filter;
- private final Collector delegate;
- private int docBase;
private int matches;
public FilterCollector(DocSet filter, Collector delegate) {
+ super(delegate);
this.filter = filter;
- this.delegate = delegate;
- }
-
- @Override
- public void setScorer(Scorer scorer) throws IOException {
- delegate.setScorer(scorer);
- }
-
- @Override
- public void collect(int doc) throws IOException {
- matches++;
- if (filter.exists(doc + docBase)) {
- delegate.collect(doc);
- }
- }
-
- @Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
- this.docBase = context.docBase;
- delegate.setNextReader(context);
}
@Override
- public boolean acceptsDocsOutOfOrder() {
- return delegate.acceptsDocsOutOfOrder();
+ public LeafCollector getLeafCollector(AtomicReaderContext context)
+ throws IOException {
+ final int docBase = context.docBase;
+ return new FilterLeafCollector(super.getLeafCollector(context)) {
+ @Override
+ public void collect(int doc) throws IOException {
+ matches++;
+ if (filter.exists(doc + docBase)) {
+ super.collect(doc);
+ }
+ }
+ };
}
public int getMatches() {
@@ -75,6 +65,6 @@ public class FilterCollector extends Col
* @return the delegate collector
*/
public Collector getDelegate() {
- return delegate;
+ return in;
}
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSort.java?rev=1584747&r1=1584746&r2=1584747&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSort.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSort.java Fri Apr 4 15:31:00 2014
@@ -32,10 +32,13 @@ import org.apache.lucene.index.AtomicRea
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.BitsFilteredDocIdSet;
import org.apache.lucene.search.Collector;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.FilterLeafCollector;
+import org.apache.lucene.search.FilterCollector;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.ScoreDoc;
@@ -265,30 +268,21 @@ public class TestSort extends SolrTestCa
final List<MyDoc> collectedDocs = new ArrayList<>();
// delegate and collect docs ourselves
- Collector myCollector = new Collector() {
- int docBase;
+ Collector myCollector = new FilterCollector(topCollector) {
@Override
- public void setScorer(Scorer scorer) throws IOException {
- topCollector.setScorer(scorer);
+ public LeafCollector getLeafCollector(AtomicReaderContext context)
+ throws IOException {
+ final int docBase = context.docBase;
+ return new FilterLeafCollector(super.getLeafCollector(context)) {
+ @Override
+ public void collect(int doc) throws IOException {
+ super.collect(doc);
+ collectedDocs.add(mydocs[docBase + doc]);
+ }
+ };
}
- @Override
- public void collect(int doc) throws IOException {
- topCollector.collect(doc);
- collectedDocs.add(mydocs[doc + docBase]);
- }
-
- @Override
- public void setNextReader(AtomicReaderContext context) throws IOException {
- topCollector.setNextReader(context);
- docBase = context.docBase;
- }
-
- @Override
- public boolean acceptsDocsOutOfOrder() {
- return topCollector.acceptsDocsOutOfOrder();
- }
};
searcher.search(new MatchAllDocsQuery(), filt, myCollector);