Upgrade to lucene-5.1.0-snapshot-1652032.
This new Lucene snapshot does not have out-of-order scoring anymore. Close #9318
This commit is contained in:
parent
95bc7df289
commit
1fc24a8837
6
pom.xml
6
pom.xml
|
@ -31,8 +31,8 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<lucene.version>5.0.0</lucene.version>
|
<lucene.version>5.1.0</lucene.version>
|
||||||
<lucene.maven.version>5.0.0-snapshot-1650327</lucene.maven.version>
|
<lucene.maven.version>5.1.0-snapshot-1652032</lucene.maven.version>
|
||||||
<tests.jvms>auto</tests.jvms>
|
<tests.jvms>auto</tests.jvms>
|
||||||
<tests.shuffle>true</tests.shuffle>
|
<tests.shuffle>true</tests.shuffle>
|
||||||
<tests.output>onerror</tests.output>
|
<tests.output>onerror</tests.output>
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>Lucene snapshots</id>
|
<id>Lucene snapshots</id>
|
||||||
<url>https://download.elasticsearch.org/lucenesnapshots/1650327</url>
|
<url>https://download.elasticsearch.org/lucenesnapshots/1652032</url>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
|
|
|
@ -223,7 +223,7 @@ public class Version {
|
||||||
public static final int V_1_5_0_ID = 1050099;
|
public static final int V_1_5_0_ID = 1050099;
|
||||||
public static final Version V_1_5_0 = new Version(V_1_5_0_ID, true, org.apache.lucene.util.Version.LUCENE_4_10_3);
|
public static final Version V_1_5_0 = new Version(V_1_5_0_ID, true, org.apache.lucene.util.Version.LUCENE_4_10_3);
|
||||||
public static final int V_2_0_0_ID = 2000099;
|
public static final int V_2_0_0_ID = 2000099;
|
||||||
public static final Version V_2_0_0 = new Version(V_2_0_0_ID, true, org.apache.lucene.util.Version.LUCENE_5_0_0);
|
public static final Version V_2_0_0 = new Version(V_2_0_0_ID, true, org.apache.lucene.util.Version.LUCENE_5_1_0);
|
||||||
|
|
||||||
public static final Version CURRENT = V_2_0_0;
|
public static final Version CURRENT = V_2_0_0;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ package org.elasticsearch.common.lucene;
|
||||||
|
|
||||||
import org.apache.lucene.analysis.core.KeywordAnalyzer;
|
import org.apache.lucene.analysis.core.KeywordAnalyzer;
|
||||||
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
||||||
import org.apache.lucene.codecs.Codec;
|
|
||||||
import org.apache.lucene.codecs.CodecUtil;
|
import org.apache.lucene.codecs.CodecUtil;
|
||||||
import org.apache.lucene.codecs.DocValuesFormat;
|
import org.apache.lucene.codecs.DocValuesFormat;
|
||||||
import org.apache.lucene.codecs.PostingsFormat;
|
import org.apache.lucene.codecs.PostingsFormat;
|
||||||
|
@ -537,11 +536,6 @@ public class Lucene {
|
||||||
public void doSetNextReader(LeafReaderContext atomicReaderContext) throws IOException {
|
public void doSetNextReader(LeafReaderContext atomicReaderContext) throws IOException {
|
||||||
leafCollector = delegate.getLeafCollector(atomicReaderContext);
|
leafCollector = delegate.getLeafCollector(atomicReaderContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return leafCollector.acceptsDocsOutOfOrder();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Lucene() {
|
private Lucene() {
|
||||||
|
|
|
@ -60,9 +60,4 @@ public class MinimumScoreCollector extends SimpleCollector {
|
||||||
public void doSetNextReader(LeafReaderContext context) throws IOException {
|
public void doSetNextReader(LeafReaderContext context) throws IOException {
|
||||||
leafCollector = collector.getLeafCollector(context);
|
leafCollector = collector.getLeafCollector(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return leafCollector.acceptsDocsOutOfOrder();
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -71,19 +71,6 @@ public class MultiCollector extends SimpleCollector implements XCollector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
if (!leafCollector.acceptsDocsOutOfOrder()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (LeafCollector leafCollector : leafCollectors) {
|
|
||||||
if (!leafCollector.acceptsDocsOutOfOrder()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postCollection() throws IOException {
|
public void postCollection() throws IOException {
|
||||||
if (collector instanceof XCollector) {
|
if (collector instanceof XCollector) {
|
||||||
|
|
|
@ -77,10 +77,6 @@ public class FilteredCollector implements XCollector {
|
||||||
public void collect(int doc) throws IOException {
|
public void collect(int doc) throws IOException {
|
||||||
// no-op
|
// no-op
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,12 +94,6 @@ public class FilteredCollector implements XCollector {
|
||||||
in.collect(doc);
|
in.collect(doc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
// we only support iterating in order because the iterator can only advance
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,4 @@ public class NoopCollector extends SimpleCollector {
|
||||||
@Override
|
@Override
|
||||||
protected void doSetNextReader(LeafReaderContext context) throws IOException {
|
protected void doSetNextReader(LeafReaderContext context) throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,9 +96,4 @@ final class QueriesLoaderCollector extends SimpleCollector {
|
||||||
@Override
|
@Override
|
||||||
public void setScorer(Scorer scorer) throws IOException {
|
public void setScorer(Scorer scorer) throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,11 +131,6 @@ public class IncludeNestedDocsQuery extends Query {
|
||||||
public Explanation explain(LeafReaderContext context, int doc) throws IOException {
|
public Explanation explain(LeafReaderContext context, int doc) throws IOException {
|
||||||
return null; //Query is used internally and not by users, so explain can be empty
|
return null; //Query is used internally and not by users, so explain can be empty
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean scoresDocsOutOfOrder() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class IncludeNestedDocsScorer extends Scorer {
|
static class IncludeNestedDocsScorer extends Scorer {
|
||||||
|
|
|
@ -120,12 +120,6 @@ abstract class QueryCollector extends SimpleCollector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static Match match(ESLogger logger, PercolateContext context, HighlightPhase highlightPhase, boolean isNestedDoc) throws IOException {
|
static Match match(ESLogger logger, PercolateContext context, HighlightPhase highlightPhase, boolean isNestedDoc) throws IOException {
|
||||||
return new Match(logger, context, highlightPhase, isNestedDoc);
|
return new Match(logger, context, highlightPhase, isNestedDoc);
|
||||||
}
|
}
|
||||||
|
@ -231,7 +225,7 @@ abstract class QueryCollector extends SimpleCollector {
|
||||||
MatchAndSort(ESLogger logger, PercolateContext context, boolean isNestedDoc) throws IOException {
|
MatchAndSort(ESLogger logger, PercolateContext context, boolean isNestedDoc) throws IOException {
|
||||||
super(logger, context, isNestedDoc);
|
super(logger, context, isNestedDoc);
|
||||||
// TODO: Use TopFieldCollector.create(...) for ascending and descending scoring?
|
// TODO: Use TopFieldCollector.create(...) for ascending and descending scoring?
|
||||||
topDocsCollector = TopScoreDocCollector.create(context.size(), false);
|
topDocsCollector = TopScoreDocCollector.create(context.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.apache.lucene.search.Query;
|
||||||
import org.apache.lucene.search.Scorer;
|
import org.apache.lucene.search.Scorer;
|
||||||
import org.apache.lucene.search.SimpleCollector;
|
import org.apache.lucene.search.SimpleCollector;
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.ExceptionsHelper;
|
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.lucene.search.Queries;
|
import org.elasticsearch.common.lucene.search.Queries;
|
||||||
import org.elasticsearch.common.lucene.search.XCollector;
|
import org.elasticsearch.common.lucene.search.XCollector;
|
||||||
|
@ -179,11 +178,6 @@ public class AggregationPhase implements SearchPhase {
|
||||||
aggregationContext.setNextReader(context);
|
aggregationContext.setNextReader(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return !aggregationContext.scoreDocsInOrder();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postCollection() throws IOException {
|
public void postCollection() throws IOException {
|
||||||
for (Aggregator collector : collectors) {
|
for (Aggregator collector : collectors) {
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.apache.lucene.index.LeafReaderContext;
|
||||||
import org.apache.lucene.util.packed.PackedInts;
|
import org.apache.lucene.util.packed.PackedInts;
|
||||||
import org.apache.lucene.util.packed.PackedLongValues;
|
import org.apache.lucene.util.packed.PackedLongValues;
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.search.aggregations.support.AggregationContext;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -104,11 +103,6 @@ public class RecordingPerReaderBucketCollector extends RecordingBucketCollector
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public RecordingPerReaderBucketCollector(AggregationContext context) {
|
|
||||||
// Call this method to achieve better compression in the recorded arrays of matches
|
|
||||||
context.ensureScoreDocsInOrder();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNextReader(LeafReaderContext reader) {
|
public void setNextReader(LeafReaderContext reader) {
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class DeferringBucketCollector extends BucketCollector implements Releasa
|
||||||
|
|
||||||
public DeferringBucketCollector(BucketCollector deferred, AggregationContext context) {
|
public DeferringBucketCollector(BucketCollector deferred, AggregationContext context) {
|
||||||
this.deferred = deferred;
|
this.deferred = deferred;
|
||||||
this.recording = new RecordingPerReaderBucketCollector(context);
|
this.recording = new RecordingPerReaderBucketCollector();
|
||||||
this.context = context;
|
this.context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,6 @@ public class NestedAggregator extends SingleBucketAggregator implements ReaderCo
|
||||||
super(name, factories, aggregationContext, parentAggregator, metaData);
|
super(name, factories, aggregationContext, parentAggregator, metaData);
|
||||||
this.parentAggregator = parentAggregator;
|
this.parentAggregator = parentAggregator;
|
||||||
childFilter = aggregationContext.searchContext().filterCache().cache(objectMapper.nestedTypeFilter(), null, filterCachingPolicy);
|
childFilter = aggregationContext.searchContext().filterCache().cache(objectMapper.nestedTypeFilter(), null, filterCachingPolicy);
|
||||||
// The childDocs need to be consumed in docId order, this ensures that:
|
|
||||||
aggregationContext.ensureScoreDocsInOrder();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -57,7 +57,6 @@ public class ReverseNestedAggregator extends SingleBucketAggregator implements R
|
||||||
parentFilter = SearchContext.current().bitsetFilterCache().getBitDocIdSetFilter(objectMapper.nestedTypeFilter());
|
parentFilter = SearchContext.current().bitsetFilterCache().getBitDocIdSetFilter(objectMapper.nestedTypeFilter());
|
||||||
}
|
}
|
||||||
bucketOrdToLastCollectedParentDoc = new LongIntOpenHashMap(32);
|
bucketOrdToLastCollectedParentDoc = new LongIntOpenHashMap(32);
|
||||||
aggregationContext.ensureScoreDocsInOrder();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -117,7 +117,7 @@ public class TopHitsAggregator extends MetricsAggregator implements ScorerAware
|
||||||
if (collectors == null) {
|
if (collectors == null) {
|
||||||
Sort sort = subSearchContext.sort();
|
Sort sort = subSearchContext.sort();
|
||||||
int topN = subSearchContext.from() + subSearchContext.size();
|
int topN = subSearchContext.from() + subSearchContext.size();
|
||||||
TopDocsCollector<?> topLevelCollector = sort != null ? TopFieldCollector.create(sort, topN, true, subSearchContext.trackScores(), subSearchContext.trackScores(), false) : TopScoreDocCollector.create(topN, false);
|
TopDocsCollector<?> topLevelCollector = sort != null ? TopFieldCollector.create(sort, topN, true, subSearchContext.trackScores(), subSearchContext.trackScores()) : TopScoreDocCollector.create(topN);
|
||||||
collectors = new TopDocsAndLeafCollector(topLevelCollector);
|
collectors = new TopDocsAndLeafCollector(topLevelCollector);
|
||||||
collectors.leafCollector = collectors.topLevelCollector.getLeafCollector(currentContext);
|
collectors.leafCollector = collectors.topLevelCollector.getLeafCollector(currentContext);
|
||||||
collectors.leafCollector.setScorer(currentScorer);
|
collectors.leafCollector.setScorer(currentScorer);
|
||||||
|
|
|
@ -58,7 +58,6 @@ public class AggregationContext implements ReaderContextAware, ScorerAware {
|
||||||
|
|
||||||
private LeafReaderContext reader;
|
private LeafReaderContext reader;
|
||||||
private Scorer scorer;
|
private Scorer scorer;
|
||||||
private boolean scoreDocsInOrder = false;
|
|
||||||
|
|
||||||
public AggregationContext(SearchContext searchContext) {
|
public AggregationContext(SearchContext searchContext) {
|
||||||
this.searchContext = searchContext;
|
this.searchContext = searchContext;
|
||||||
|
@ -104,14 +103,6 @@ public class AggregationContext implements ReaderContextAware, ScorerAware {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean scoreDocsInOrder() {
|
|
||||||
return scoreDocsInOrder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ensureScoreDocsInOrder() {
|
|
||||||
this.scoreDocsInOrder = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get a value source given its configuration and the depth of the aggregator in the aggregation tree. */
|
/** Get a value source given its configuration and the depth of the aggregator in the aggregation tree. */
|
||||||
public <VS extends ValuesSource> VS valuesSource(ValuesSourceConfig<VS> config, int depth) throws IOException {
|
public <VS extends ValuesSource> VS valuesSource(ValuesSourceConfig<VS> config, int depth) throws IOException {
|
||||||
assert config.valid() : "value source config is invalid - must have either a field context or a script or marked as unmapped";
|
assert config.valid() : "value source config is invalid - must have either a field context or a script or marked as unmapped";
|
||||||
|
|
|
@ -114,12 +114,12 @@ public final class InnerHitsContext {
|
||||||
int topN = from() + size();
|
int topN = from() + size();
|
||||||
if (sort() != null) {
|
if (sort() != null) {
|
||||||
try {
|
try {
|
||||||
topDocsCollector = TopFieldCollector.create(sort(), topN, true, trackScores(), trackScores(), true);
|
topDocsCollector = TopFieldCollector.create(sort(), topN, true, trackScores(), trackScores());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw ExceptionsHelper.convertToElastic(e);
|
throw ExceptionsHelper.convertToElastic(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
topDocsCollector = TopScoreDocCollector.create(topN, true);
|
topDocsCollector = TopScoreDocCollector.create(topN);
|
||||||
}
|
}
|
||||||
|
|
||||||
Filter rawParentFilter;
|
Filter rawParentFilter;
|
||||||
|
@ -249,12 +249,12 @@ public final class InnerHitsContext {
|
||||||
int topN = from() + size();
|
int topN = from() + size();
|
||||||
if (sort() != null) {
|
if (sort() != null) {
|
||||||
try {
|
try {
|
||||||
topDocsCollector = TopFieldCollector.create(sort(), topN, true, trackScores(), trackScores(), false);
|
topDocsCollector = TopFieldCollector.create(sort(), topN, true, trackScores(), trackScores());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw ExceptionsHelper.convertToElastic(e);
|
throw ExceptionsHelper.convertToElastic(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
topDocsCollector = TopScoreDocCollector.create(topN, false);
|
topDocsCollector = TopScoreDocCollector.create(topN);
|
||||||
}
|
}
|
||||||
|
|
||||||
String field;
|
String field;
|
||||||
|
|
|
@ -132,11 +132,6 @@ public class ScanContext {
|
||||||
this.readerState = new ReaderState();
|
this.readerState = new ReaderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsDocsOutOfOrder() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final RuntimeException StopCollectingException = new StopCollectingException();
|
public static final RuntimeException StopCollectingException = new StopCollectingException();
|
||||||
|
|
||||||
static class StopCollectingException extends RuntimeException {
|
static class StopCollectingException extends RuntimeException {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import com.carrotsearch.hppc.FloatArrayList;
|
||||||
import com.carrotsearch.hppc.IntOpenHashSet;
|
import com.carrotsearch.hppc.IntOpenHashSet;
|
||||||
import com.carrotsearch.hppc.ObjectObjectOpenHashMap;
|
import com.carrotsearch.hppc.ObjectObjectOpenHashMap;
|
||||||
import com.carrotsearch.randomizedtesting.generators.RandomInts;
|
import com.carrotsearch.randomizedtesting.generators.RandomInts;
|
||||||
|
|
||||||
import org.apache.lucene.analysis.MockAnalyzer;
|
import org.apache.lucene.analysis.MockAnalyzer;
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
import org.apache.lucene.document.DoubleField;
|
import org.apache.lucene.document.DoubleField;
|
||||||
|
@ -216,17 +217,15 @@ public class ChildrenQueryTests extends AbstractChildTests {
|
||||||
Query query = parseQuery(queryBuilder);
|
Query query = parseQuery(queryBuilder);
|
||||||
BitSetCollector collector = new BitSetCollector(indexReader.maxDoc());
|
BitSetCollector collector = new BitSetCollector(indexReader.maxDoc());
|
||||||
int numHits = 1 + random().nextInt(25);
|
int numHits = 1 + random().nextInt(25);
|
||||||
TopScoreDocCollector actualTopDocsCollector = TopScoreDocCollector.create(numHits, false);
|
TopScoreDocCollector actualTopDocsCollector = TopScoreDocCollector.create(numHits);
|
||||||
searcher.search(query, MultiCollector.wrap(collector, actualTopDocsCollector));
|
searcher.search(query, MultiCollector.wrap(collector, actualTopDocsCollector));
|
||||||
FixedBitSet actualResult = collector.getResult();
|
FixedBitSet actualResult = collector.getResult();
|
||||||
|
|
||||||
FixedBitSet expectedResult = new FixedBitSet(indexReader.maxDoc());
|
FixedBitSet expectedResult = new FixedBitSet(indexReader.maxDoc());
|
||||||
MockScorer mockScorer = new MockScorer(scoreType);
|
TopScoreDocCollector expectedTopDocsCollector = TopScoreDocCollector.create(numHits);
|
||||||
TopScoreDocCollector expectedTopDocsCollector = TopScoreDocCollector.create(numHits, false);
|
|
||||||
if (childValueToParentIds.containsKey(childValue)) {
|
if (childValueToParentIds.containsKey(childValue)) {
|
||||||
LeafReader slowLeafReader = SlowCompositeReaderWrapper.wrap(indexReader);
|
LeafReader slowLeafReader = SlowCompositeReaderWrapper.wrap(indexReader);
|
||||||
final LeafCollector leafCollector = expectedTopDocsCollector.getLeafCollector(slowLeafReader.getContext());
|
final FloatArrayList[] scores = new FloatArrayList[slowLeafReader.maxDoc()];
|
||||||
leafCollector.setScorer(mockScorer);
|
|
||||||
Terms terms = slowLeafReader.terms(UidFieldMapper.NAME);
|
Terms terms = slowLeafReader.terms(UidFieldMapper.NAME);
|
||||||
if (terms != null) {
|
if (terms != null) {
|
||||||
NavigableMap<String, FloatArrayList> parentIdToChildScores = childValueToParentIds.lget();
|
NavigableMap<String, FloatArrayList> parentIdToChildScores = childValueToParentIds.lget();
|
||||||
|
@ -239,14 +238,20 @@ public class ChildrenQueryTests extends AbstractChildTests {
|
||||||
if (seekStatus == TermsEnum.SeekStatus.FOUND) {
|
if (seekStatus == TermsEnum.SeekStatus.FOUND) {
|
||||||
docsEnum = termsEnum.docs(slowLeafReader.getLiveDocs(), docsEnum, DocsEnum.FLAG_NONE);
|
docsEnum = termsEnum.docs(slowLeafReader.getLiveDocs(), docsEnum, DocsEnum.FLAG_NONE);
|
||||||
expectedResult.set(docsEnum.nextDoc());
|
expectedResult.set(docsEnum.nextDoc());
|
||||||
mockScorer.scores = entry.getValue();
|
scores[docsEnum.docID()] = new FloatArrayList(entry.getValue());
|
||||||
leafCollector.collect(docsEnum.docID());
|
|
||||||
} else if (seekStatus == TermsEnum.SeekStatus.END) {
|
} else if (seekStatus == TermsEnum.SeekStatus.END) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
MockScorer mockScorer = new MockScorer(scoreType);
|
||||||
|
final LeafCollector leafCollector = expectedTopDocsCollector.getLeafCollector(slowLeafReader.getContext());
|
||||||
|
leafCollector.setScorer(mockScorer);
|
||||||
|
for (int doc = expectedResult.nextSetBit(0); doc < slowLeafReader.maxDoc(); doc = doc + 1 >= expectedResult.length() ? DocIdSetIterator.NO_MORE_DOCS : expectedResult.nextSetBit(doc + 1)) {
|
||||||
|
mockScorer.scores = scores[doc];
|
||||||
|
leafCollector.collect(doc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assertBitSet(actualResult, expectedResult, searcher);
|
assertBitSet(actualResult, expectedResult, searcher);
|
||||||
|
|
|
@ -197,18 +197,15 @@ public class ParentQueryTests extends AbstractChildTests {
|
||||||
|
|
||||||
BitSetCollector collector = new BitSetCollector(indexReader.maxDoc());
|
BitSetCollector collector = new BitSetCollector(indexReader.maxDoc());
|
||||||
int numHits = 1 + random().nextInt(25);
|
int numHits = 1 + random().nextInt(25);
|
||||||
TopScoreDocCollector actualTopDocsCollector = TopScoreDocCollector.create(numHits, false);
|
TopScoreDocCollector actualTopDocsCollector = TopScoreDocCollector.create(numHits);
|
||||||
searcher.search(query, MultiCollector.wrap(collector, actualTopDocsCollector));
|
searcher.search(query, MultiCollector.wrap(collector, actualTopDocsCollector));
|
||||||
FixedBitSet actualResult = collector.getResult();
|
FixedBitSet actualResult = collector.getResult();
|
||||||
|
|
||||||
FixedBitSet expectedResult = new FixedBitSet(indexReader.maxDoc());
|
FixedBitSet expectedResult = new FixedBitSet(indexReader.maxDoc());
|
||||||
MockScorer mockScorer = new MockScorer(ScoreType.MAX); // just save one score per parent...
|
TopScoreDocCollector expectedTopDocsCollector = TopScoreDocCollector.create(numHits);
|
||||||
mockScorer.scores = new FloatArrayList();
|
|
||||||
TopScoreDocCollector expectedTopDocsCollector = TopScoreDocCollector.create(numHits, false);
|
|
||||||
if (parentValueToChildIds.containsKey(parentValue)) {
|
if (parentValueToChildIds.containsKey(parentValue)) {
|
||||||
LeafReader slowLeafReader = SlowCompositeReaderWrapper.wrap(indexReader);
|
LeafReader slowLeafReader = SlowCompositeReaderWrapper.wrap(indexReader);
|
||||||
final LeafCollector leafCollector = expectedTopDocsCollector.getLeafCollector(slowLeafReader.getContext());
|
final FloatArrayList[] scores = new FloatArrayList[slowLeafReader.maxDoc()];
|
||||||
leafCollector.setScorer(mockScorer);
|
|
||||||
Terms terms = slowLeafReader.terms(UidFieldMapper.NAME);
|
Terms terms = slowLeafReader.terms(UidFieldMapper.NAME);
|
||||||
if (terms != null) {
|
if (terms != null) {
|
||||||
NavigableMap<String, Float> childIdsAndScore = parentValueToChildIds.lget();
|
NavigableMap<String, Float> childIdsAndScore = parentValueToChildIds.lget();
|
||||||
|
@ -219,14 +216,25 @@ public class ParentQueryTests extends AbstractChildTests {
|
||||||
if (seekStatus == TermsEnum.SeekStatus.FOUND) {
|
if (seekStatus == TermsEnum.SeekStatus.FOUND) {
|
||||||
docsEnum = termsEnum.docs(slowLeafReader.getLiveDocs(), docsEnum, DocsEnum.FLAG_NONE);
|
docsEnum = termsEnum.docs(slowLeafReader.getLiveDocs(), docsEnum, DocsEnum.FLAG_NONE);
|
||||||
expectedResult.set(docsEnum.nextDoc());
|
expectedResult.set(docsEnum.nextDoc());
|
||||||
mockScorer.scores.add(entry.getValue());
|
FloatArrayList s = scores[docsEnum.docID()];
|
||||||
leafCollector.collect(docsEnum.docID());
|
if (s == null) {
|
||||||
mockScorer.scores.clear();
|
scores[docsEnum.docID()] = s = new FloatArrayList(2);
|
||||||
|
}
|
||||||
|
s.add(entry.getValue());
|
||||||
} else if (seekStatus == TermsEnum.SeekStatus.END) {
|
} else if (seekStatus == TermsEnum.SeekStatus.END) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
MockScorer mockScorer = new MockScorer(ScoreType.MAX);
|
||||||
|
mockScorer.scores = new FloatArrayList();
|
||||||
|
final LeafCollector leafCollector = expectedTopDocsCollector.getLeafCollector(slowLeafReader.getContext());
|
||||||
|
leafCollector.setScorer(mockScorer);
|
||||||
|
for (int doc = expectedResult.nextSetBit(0); doc < slowLeafReader.maxDoc(); doc = doc + 1 >= expectedResult.length() ? DocIdSetIterator.NO_MORE_DOCS : expectedResult.nextSetBit(doc + 1)) {
|
||||||
|
mockScorer.scores.clear();
|
||||||
|
mockScorer.scores.addAll(scores[doc]);
|
||||||
|
leafCollector.collect(doc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assertBitSet(actualResult, expectedResult, searcher);
|
assertBitSet(actualResult, expectedResult, searcher);
|
||||||
|
|
Loading…
Reference in New Issue