You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2014/04/05 11:03:00 UTC
svn commit: r1585024 [4/4] - in /lucene/dev/branches/solr5914: ./ dev-tools/
dev-tools/idea/.idea/libraries/ lucene/ lucene/core/
lucene/core/src/java/org/apache/lucene/index/
lucene/core/src/java/org/apache/lucene/search/
lucene/core/src/java/org/apac...
Modified: lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/FacetingAccumulator.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/ValueAccumulator.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/QueryFacetAccumulator.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/accumulator/facet/RangeFacetAccumulator.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/analytics/request/AnalyticsStats.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java Sat Apr 5 09:02:57 2014
@@ -557,14 +557,14 @@ public class OverseerCollectionProcessor
Snapshot snapshot = timer.getSnapshot();
lst.add("totalTime", timer.getSum());
lst.add("avgRequestsPerMinute", timer.getMeanRate());
- lst.add("5minRateReqsPerMinute", timer.getFiveMinuteRate());
- lst.add("15minRateReqsPerMinute", timer.getFifteenMinuteRate());
+ lst.add("5minRateRequestsPerMinute", timer.getFiveMinuteRate());
+ lst.add("15minRateRequestsPerMinute", timer.getFifteenMinuteRate());
lst.add("avgTimePerRequest", timer.getMean());
lst.add("medianRequestTime", snapshot.getMedian());
- lst.add("75thPcRequestTime", snapshot.get75thPercentile());
- lst.add("95thPcRequestTime", snapshot.get95thPercentile());
- lst.add("99thPcRequestTime", snapshot.get99thPercentile());
- lst.add("999thPcRequestTime", snapshot.get999thPercentile());
+ lst.add("75thPctlRequestTime", snapshot.get75thPercentile());
+ lst.add("95thPctlRequestTime", snapshot.get95thPercentile());
+ lst.add("99thPctlRequestTime", snapshot.get99thPercentile());
+ lst.add("999thPctlRequestTime", snapshot.get999thPercentile());
}
results.add("overseer_operations", overseerStats);
results.add("collection_operations", collectionStats);
Modified: lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/schema/LatLonType.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/schema/LatLonType.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/DelegatingCollector.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/DocSetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/DocSetCollector.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/DocSetCollector.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/DocSetCollector.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/EarlyTerminatingCollector.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/Grouping.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/Grouping.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/java/org/apache/solr/search/grouping/collector/FilterCollector.java Sat Apr 5 09:02:57 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/branches/solr5914/solr/core/src/test/org/apache/solr/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/search/TestSort.java?rev=1585024&r1=1585023&r2=1585024&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/search/TestSort.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/search/TestSort.java Sat Apr 5 09:02:57 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);