You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/01/11 12:59:28 UTC
svn commit: r1057595 [1/2] - in /lucene/dev/trunk:
lucene/contrib/queries/src/java/org/apache/lucene/search/
lucene/contrib/queries/src/test/org/apache/lucene/search/
lucene/contrib/spatial/src/java/org/apache/lucene/spatial/geohash/
lucene/contrib/spa...
Author: simonw
Date: Tue Jan 11 11:59:26 2011
New Revision: 1057595
URL: http://svn.apache.org/viewvc?rev=1057595&view=rev
Log:
LUCENE-2831: cut over to AtomicReaderContext in Weight#scorer, Weight#explain & Filter#getDocIdSet
Modified:
lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java
lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/ChainedFilter.java
lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/DuplicateFilter.java
lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/FieldCacheRewriteMethod.java
lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java
lucene/dev/trunk/lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java
lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/geohash/GeoHashDistanceFilter.java
lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/CartesianShapeFilter.java
lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/LatLongDistanceFilter.java
lucene/dev/trunk/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java
lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java
lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/BufferedDeletes.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/ConstantScoreQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheRangeFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheTermsFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Filter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FilteredQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/IndexSearcher.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MatchAllDocsQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/PhraseQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/TermQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Weight.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/CustomScoreQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/ValueSourceQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/ReaderUtil.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/CachingWrapperFilterHelper.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/MockFilter.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/QueryUtils.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/SingleDocTestFilter.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestDocIdSet.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestFilteredQuery.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestFilteredSearch.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestScorerPerf.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestSort.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestTermScorer.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java
lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
lucene/dev/trunk/solr/src/java/org/apache/solr/schema/LatLonType.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/DocSet.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/SolrFilter.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/SortedIntDocSet.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/function/BoostedQuery.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/function/FunctionQuery.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/function/ScaleFloatFunction.java
lucene/dev/trunk/solr/src/java/org/apache/solr/search/function/ValueSource.java
lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestDocSet.java
lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestSort.java
Modified: lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.util.ArrayList;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.util.OpenBitSet;
import org.apache.lucene.util.OpenBitSetDISI;
@@ -42,10 +42,10 @@ public class BooleanFilter extends Filte
ArrayList<Filter> notFilters = null;
ArrayList<Filter> mustFilters = null;
- private DocIdSetIterator getDISI(ArrayList<Filter> filters, int index, ReaderContext info)
+ private DocIdSetIterator getDISI(ArrayList<Filter> filters, int index, AtomicReaderContext context)
throws IOException
{
- return filters.get(index).getDocIdSet(info).iterator();
+ return filters.get(index).getDocIdSet(context).iterator();
}
/**
@@ -53,7 +53,7 @@ public class BooleanFilter extends Filte
* of the filters that have been added.
*/
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException
{
OpenBitSetDISI res = null;
final IndexReader reader = context.reader;
Modified: lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/ChainedFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/ChainedFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/ChainedFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/ChainedFilter.java Tue Jan 11 11:59:26 2011
@@ -20,7 +20,7 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.Filter;
@@ -97,7 +97,7 @@ public class ChainedFilter extends Filte
* {@link Filter#getDocIdSet}.
*/
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException
{
int[] index = new int[1]; // use array as reference to modifiable int;
index[0] = 0; // an object attribute would not be thread safe.
@@ -109,9 +109,9 @@ public class ChainedFilter extends Filte
return getDocIdSet(context, DEFAULT, index);
}
- private DocIdSetIterator getDISI(Filter filter, ReaderContext info)
+ private DocIdSetIterator getDISI(Filter filter, AtomicReaderContext context)
throws IOException {
- DocIdSet docIdSet = filter.getDocIdSet(info);
+ DocIdSet docIdSet = filter.getDocIdSet(context);
if (docIdSet == null) {
return DocIdSet.EMPTY_DOCIDSET.iterator();
} else {
@@ -124,10 +124,10 @@ public class ChainedFilter extends Filte
}
}
- private OpenBitSetDISI initialResult(ReaderContext info, int logic, int[] index)
+ private OpenBitSetDISI initialResult(AtomicReaderContext context, int logic, int[] index)
throws IOException
{
- IndexReader reader = info.reader;
+ IndexReader reader = context.reader;
OpenBitSetDISI result;
/**
* First AND operation takes place against a completely false
@@ -135,12 +135,12 @@ public class ChainedFilter extends Filte
*/
if (logic == AND)
{
- result = new OpenBitSetDISI(getDISI(chain[index[0]], info), reader.maxDoc());
+ result = new OpenBitSetDISI(getDISI(chain[index[0]], context), reader.maxDoc());
++index[0];
}
else if (logic == ANDNOT)
{
- result = new OpenBitSetDISI(getDISI(chain[index[0]], info), reader.maxDoc());
+ result = new OpenBitSetDISI(getDISI(chain[index[0]], context), reader.maxDoc());
result.flip(0,reader.maxDoc()); // NOTE: may set bits for deleted docs.
++index[0];
}
@@ -157,13 +157,13 @@ public class ChainedFilter extends Filte
* @param logic Logical operation
* @return DocIdSet
*/
- private DocIdSet getDocIdSet(ReaderContext info, int logic, int[] index)
+ private DocIdSet getDocIdSet(AtomicReaderContext context, int logic, int[] index)
throws IOException
{
- OpenBitSetDISI result = initialResult(info, logic, index);
+ OpenBitSetDISI result = initialResult(context, logic, index);
for (; index[0] < chain.length; index[0]++)
{
- doChain(result, logic, chain[index[0]].getDocIdSet(info));
+ doChain(result, logic, chain[index[0]].getDocIdSet(context));
}
return result;
}
@@ -174,7 +174,7 @@ public class ChainedFilter extends Filte
* @param logic Logical operation
* @return DocIdSet
*/
- private DocIdSet getDocIdSet(ReaderContext info, int[] logic, int[] index)
+ private DocIdSet getDocIdSet(AtomicReaderContext info, int[] logic, int[] index)
throws IOException
{
if (logic.length != chain.length)
Modified: lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/DuplicateFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/DuplicateFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/DuplicateFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/DuplicateFilter.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ import java.io.IOException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.TermsEnum;
@@ -72,7 +72,7 @@ public class DuplicateFilter extends Fil
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException
{
if(processingMode==PM_FAST_INVALIDATION)
{
Modified: lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/FieldCacheRewriteMethod.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/FieldCacheRewriteMethod.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/FieldCacheRewriteMethod.java (original)
+++ lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/FieldCacheRewriteMethod.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.util.Comparator;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.BytesRef;
@@ -109,7 +109,7 @@ public final class FieldCacheRewriteMeth
* results.
*/
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final FieldCache.DocTermsIndex fcsi = FieldCache.DEFAULT.getTermsIndex(context.reader, query.field);
final OpenBitSet termSet = new OpenBitSet(fcsi.numOrd());
TermsEnum termsEnum = query.getTermsEnum(new Terms() {
Modified: lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java Tue Jan 11 11:59:26 2011
@@ -23,7 +23,7 @@ import java.util.Set;
import java.util.TreeSet;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.Terms;
@@ -58,7 +58,7 @@ public class TermsFilter extends Filter
* @see org.apache.lucene.search.Filter#getDocIdSet(org.apache.lucene.index.IndexReader)
*/
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
IndexReader reader = context.reader;
OpenBitSet result=new OpenBitSet(reader.maxDoc());
Fields fields = reader.fields();
Modified: lucene/dev/trunk/lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java (original)
+++ lucene/dev/trunk/lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.util.HashSet;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
@@ -60,7 +60,8 @@ public class TermsFilterTest extends Luc
w.addDocument(doc);
}
IndexReader reader = new SlowMultiReaderWrapper(w.getReader());
- ReaderContext context = reader.getTopReaderContext();
+ assertTrue(reader.getTopReaderContext().isAtomic);
+ AtomicReaderContext context = (AtomicReaderContext) reader.getTopReaderContext();
assertTrue(context.isAtomic);
w.close();
Modified: lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/geohash/GeoHashDistanceFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/geohash/GeoHashDistanceFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/geohash/GeoHashDistanceFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/geohash/GeoHashDistanceFilter.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ package org.apache.lucene.spatial.geohas
import java.io.IOException;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.FieldCache.DocTerms;
import org.apache.lucene.search.Filter;
@@ -62,7 +62,7 @@ public class GeoHashDistanceFilter exten
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final DocTerms geoHashValues = FieldCache.DEFAULT.getTerms(context.reader, geoHashField);
final BytesRef br = new BytesRef();
Modified: lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/CartesianShapeFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/CartesianShapeFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/CartesianShapeFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/CartesianShapeFilter.java Tue Jan 11 11:59:26 2011
@@ -20,7 +20,7 @@ import java.io.IOException;
import java.util.List;
import org.apache.lucene.index.DocsEnum;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
@@ -45,7 +45,7 @@ public class CartesianShapeFilter extend
}
@Override
- public DocIdSet getDocIdSet(final ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(final AtomicReaderContext context) throws IOException {
final Bits delDocs = context.reader.getDeletedDocs();
final List<Double> area = shape.getArea();
final int sz = area.size();
Modified: lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/LatLongDistanceFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/LatLongDistanceFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/LatLongDistanceFilter.java (original)
+++ lucene/dev/trunk/lucene/contrib/spatial/src/java/org/apache/lucene/spatial/tier/LatLongDistanceFilter.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ package org.apache.lucene.spatial.tier;
import java.io.IOException;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.FilteredDocIdSet;
import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.Filter;
@@ -65,7 +65,7 @@ public class LatLongDistanceFilter exten
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final double[] latIndex = FieldCache.DEFAULT.getDoubles(context.reader, latField);
final double[] lngIndex = FieldCache.DEFAULT.getDoubles(context.reader, lngField);
Modified: lucene/dev/trunk/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java (original)
+++ lucene/dev/trunk/lucene/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestDistance.java Tue Jan 11 11:59:26 2011
@@ -29,6 +29,7 @@ import org.apache.lucene.index.IndexRead
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.ReaderUtil;
import org.apache.lucene.store.Directory;
@@ -102,7 +103,7 @@ public class TestDistance extends Lucene
LatLongDistanceFilter f = new LatLongDistanceFilter(new QueryWrapperFilter(new MatchAllDocsQuery()),
lat, lng, 1.0, latField, lngField);
- AtomicReaderContext[] leaves = r.getTopReaderContext().leaves();
+ AtomicReaderContext[] leaves = ReaderUtil.leaves(r.getTopReaderContext());
for (int i = 0; i < leaves.length; i++) {
f.getDocIdSet(leaves[i]);
}
Modified: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java (original)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ package org.apache.lucene.xmlparser.buil
import java.io.IOException;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.NumericRangeFilter;
@@ -157,7 +157,7 @@ public class NumericRangeFilterBuilder i
private static final long serialVersionUID = 1L;
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
return null;
}
Modified: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java (original)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java Tue Jan 11 11:59:26 2011
@@ -28,7 +28,9 @@ import javax.xml.parsers.ParserConfigura
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.SlowMultiReaderWrapper;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.NumericRangeFilter;
import org.apache.lucene.store.Directory;
@@ -64,10 +66,10 @@ public class TestNumericRangeFilterBuild
writer.commit();
try
{
- IndexReader reader = IndexReader.open(ramDir, true);
+ IndexReader reader = new SlowMultiReaderWrapper(IndexReader.open(ramDir, true));
try
{
- assertNull(filter.getDocIdSet(reader.getTopReaderContext()));
+ assertNull(filter.getDocIdSet((AtomicReaderContext) reader.getTopReaderContext()));
}
finally
{
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/BufferedDeletes.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/BufferedDeletes.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/BufferedDeletes.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/BufferedDeletes.java Tue Jan 11 11:59:26 2011
@@ -26,7 +26,7 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
@@ -365,9 +365,8 @@ class BufferedDeletes {
// Delete by query
if (deletes.queries.size() > 0) {
IndexSearcher searcher = new IndexSearcher(reader);
-
- final ReaderContext readerContext = searcher.getTopReaderContext();
- assert readerContext.isAtomic;
+ assert searcher.getTopReaderContext().isAtomic;
+ final AtomicReaderContext readerContext = (AtomicReaderContext) searcher.getTopReaderContext();
try {
for (Entry<Query, Integer> entry : deletes.queries.entrySet()) {
Query query = entry.getKey();
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java Tue Jan 11 11:59:26 2011
@@ -18,7 +18,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.util.ToStringUtils;
import org.apache.lucene.search.BooleanClause.Occur;
@@ -212,7 +212,7 @@ public class BooleanQuery extends Query
}
@Override
- public Explanation explain(ReaderContext context, int doc)
+ public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
final int minShouldMatch =
BooleanQuery.this.getMinimumNumberShouldMatch();
@@ -288,7 +288,7 @@ public class BooleanQuery extends Query
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer)
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer)
throws IOException {
List<Scorer> required = new ArrayList<Scorer>();
List<Scorer> prohibited = new ArrayList<Scorer>();
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java Tue Jan 11 11:59:26 2011
@@ -17,7 +17,7 @@ package org.apache.lucene.search;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.Bits;
import java.io.IOException;
@@ -61,7 +61,7 @@ public class CachingSpanFilter extends S
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
SpanFilterResult result = getCachedResult(context.reader);
return result != null ? result.getDocIdSet() : null;
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java Tue Jan 11 11:59:26 2011
@@ -23,7 +23,7 @@ import java.util.Map;
import java.util.WeakHashMap;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.OpenBitSetDISI;
import org.apache.lucene.util.Bits;
@@ -195,7 +195,7 @@ public class CachingWrapperFilter extend
int hitCount, missCount;
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final IndexReader reader = context.reader;
final Object coreKey = reader.getCoreCacheKey();
final Object delCoreKey = reader.hasDeletions() ? reader.getDeletedDocs() : coreKey;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/ConstantScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/ConstantScoreQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/ConstantScoreQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/ConstantScoreQuery.java Tue Jan 11 11:59:26 2011
@@ -18,7 +18,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.util.ToStringUtils;
@@ -133,7 +133,7 @@ public class ConstantScoreQuery extends
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
final DocIdSetIterator disi;
if (filter != null) {
assert query == null;
@@ -157,7 +157,7 @@ public class ConstantScoreQuery extends
}
@Override
- public Explanation explain(ReaderContext context, int doc) throws IOException {
+ public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
final Scorer cs = scorer(context, true, false);
final boolean exists = (cs != null && cs.advance(doc) == doc);
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java Tue Jan 11 11:59:26 2011
@@ -23,7 +23,7 @@ import java.util.Iterator;
import java.util.Set;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
/**
@@ -142,7 +142,7 @@ public class DisjunctionMaxQuery extends
/* Create the scorer used to score our associated DisjunctionMaxQuery */
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder,
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
boolean topScorer) throws IOException {
Scorer[] scorers = new Scorer[weights.size()];
int idx = 0;
@@ -159,7 +159,7 @@ public class DisjunctionMaxQuery extends
/* Explain the score we computed for doc */
@Override
- public Explanation explain(ReaderContext context, int doc) throws IOException {
+ public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
if (disjuncts.size() == 1) return weights.get(0).explain(context,doc);
ComplexExplanation result = new ComplexExplanation();
float max = 0.0f, sum = 0.0f;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheRangeFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheRangeFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheRangeFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheRangeFilter.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.MultiFields;
import org.apache.lucene.util.NumericUtils;
import org.apache.lucene.util.Bits;
@@ -74,7 +74,7 @@ public abstract class FieldCacheRangeFil
/** This method is implemented for each data type */
@Override
- public abstract DocIdSet getDocIdSet(ReaderContext context) throws IOException;
+ public abstract DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException;
/**
* Creates a string range filter using {@link FieldCache#getTermsIndex}. This works with all
@@ -84,7 +84,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<String> newStringRange(String field, String lowerVal, String upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<String>(field, null, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final FieldCache.DocTermsIndex fcsi = FieldCache.DEFAULT.getTermsIndex(context.reader, field);
final BytesRef spare = new BytesRef();
final int lowerPoint = fcsi.binarySearchLookup(lowerVal == null ? null : new BytesRef(lowerVal), spare);
@@ -153,7 +153,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<Byte> newByteRange(String field, FieldCache.ByteParser parser, Byte lowerVal, Byte upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<Byte>(field, parser, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final byte inclusiveLowerPoint, inclusiveUpperPoint;
if (lowerVal != null) {
final byte i = lowerVal.byteValue();
@@ -204,7 +204,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<Short> newShortRange(String field, FieldCache.ShortParser parser, Short lowerVal, Short upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<Short>(field, parser, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final short inclusiveLowerPoint, inclusiveUpperPoint;
if (lowerVal != null) {
short i = lowerVal.shortValue();
@@ -255,7 +255,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<Integer> newIntRange(String field, FieldCache.IntParser parser, Integer lowerVal, Integer upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<Integer>(field, parser, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final int inclusiveLowerPoint, inclusiveUpperPoint;
if (lowerVal != null) {
int i = lowerVal.intValue();
@@ -306,7 +306,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<Long> newLongRange(String field, FieldCache.LongParser parser, Long lowerVal, Long upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<Long>(field, parser, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final long inclusiveLowerPoint, inclusiveUpperPoint;
if (lowerVal != null) {
long i = lowerVal.longValue();
@@ -357,7 +357,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<Float> newFloatRange(String field, FieldCache.FloatParser parser, Float lowerVal, Float upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<Float>(field, parser, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
// we transform the floating point numbers to sortable integers
// using NumericUtils to easier find the next bigger/lower value
final float inclusiveLowerPoint, inclusiveUpperPoint;
@@ -412,7 +412,7 @@ public abstract class FieldCacheRangeFil
public static FieldCacheRangeFilter<Double> newDoubleRange(String field, FieldCache.DoubleParser parser, Double lowerVal, Double upperVal, boolean includeLower, boolean includeUpper) {
return new FieldCacheRangeFilter<Double>(field, parser, lowerVal, upperVal, includeLower, includeUpper) {
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
// we transform the floating point numbers to sortable integers
// using NumericUtils to easier find the next bigger/lower value
final double inclusiveLowerPoint, inclusiveUpperPoint;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheTermsFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheTermsFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheTermsFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheTermsFilter.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import org.apache.lucene.index.DocsEnum; // javadoc @link
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.OpenBitSet;
import org.apache.lucene.util.BytesRef;
@@ -116,7 +116,7 @@ public class FieldCacheTermsFilter exten
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
return new FieldCacheTermsFilterDocIdSet(getFieldCache().getTermsIndex(context.reader, field));
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Filter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Filter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Filter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Filter.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ package org.apache.lucene.search;
import java.io.IOException;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.DocIdBitSet;
/**
@@ -38,7 +38,7 @@ public abstract class Filter implements
* must refer to document IDs for that segment, not for
* the top-level reader.
*
- * @param context a {@link ReaderContext} instance opened on the index currently
+ * @param context a {@link AtomicReaderContext} instance opened on the index currently
* searched on. Note, it is likely that the provided reader info does not
* represent the whole underlying index i.e. if the index has more than
* one segment the given reader only represents a single segment.
@@ -52,6 +52,5 @@ public abstract class Filter implements
*
* @see DocIdBitSet
*/
- // TODO make this context an AtomicContext
- public abstract DocIdSet getDocIdSet(ReaderContext context) throws IOException;
+ public abstract DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException;
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FilteredQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FilteredQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FilteredQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FilteredQuery.java Tue Jan 11 11:59:26 2011
@@ -18,7 +18,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.util.ToStringUtils;
@@ -82,7 +82,7 @@ extends Query {
}
@Override
- public Explanation explain (ReaderContext ir, int i) throws IOException {
+ public Explanation explain (AtomicReaderContext ir, int i) throws IOException {
Explanation inner = weight.explain (ir, i);
if (getBoost()!=1) {
Explanation preBoost = inner;
@@ -112,7 +112,7 @@ extends Query {
// return a filtering scorer
@Override
- public Scorer scorer(ReaderContext indexReader, boolean scoreDocsInOrder, boolean topScorer)
+ public Scorer scorer(AtomicReaderContext indexReader, boolean scoreDocsInOrder, boolean topScorer)
throws IOException {
final Scorer scorer = weight.scorer(indexReader, true, false);
if (scorer == null) {
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/IndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/IndexSearcher.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/IndexSearcher.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/IndexSearcher.java Tue Jan 11 11:59:26 2011
@@ -145,7 +145,7 @@ public class IndexSearcher {
* @lucene.experimental
*/
public IndexSearcher(ReaderContext context) {
- this(context, null);
+ this(context, (ExecutorService) null);
}
// convenience ctor for other IR based ctors
@@ -159,14 +159,8 @@ public class IndexSearcher {
this.executor = executor;
this.closeReader = closeReader;
this.readerContext = context;
- if (context.isAtomic) {
- assert context.leaves() == null : "AtomicReaderContext must not have any leaves";
- this.leafContexts = new AtomicReaderContext[] { (AtomicReaderContext) context };
- } else {
- assert context.leaves() != null : "non-atomic top-level context must have leaves";
- this.leafContexts = context.leaves();
- }
-
+ leafContexts = ReaderUtil.leaves(context);
+
if (executor == null) {
subSearchers = null;
} else {
@@ -175,12 +169,25 @@ public class IndexSearcher {
if (leafContexts[i].reader == context.reader) {
subSearchers[i] = this;
} else {
- subSearchers[i] = new IndexSearcher(leafContexts[i].reader.getTopReaderContext()); // we need to get a TL context for sub searchers!
+ subSearchers[i] = new IndexSearcher(context, leafContexts[i]);
}
}
}
}
-
+
+ /* Ctor for concurrent sub-searchers searching only on a specific leaf of the given top-reader context
+ * - instead of searching over all leaves this searcher only searches a single leaf searcher slice. Hence,
+ * for scorer and filter this looks like an ordinary search in the hierarchy such that there is no difference
+ * between single and multi-threaded */
+ private IndexSearcher(ReaderContext topLevel, AtomicReaderContext leaf) {
+ readerContext = topLevel;
+ reader = topLevel.reader;
+ leafContexts = new AtomicReaderContext[] {leaf};
+ executor = null;
+ subSearchers = null;
+ closeReader = false;
+ }
+
/** Return the {@link IndexReader} this searches. */
public IndexReader getIndexReader() {
return reader;
@@ -365,7 +372,7 @@ public class IndexSearcher {
for (int i = 0; i < subSearchers.length; i++) { // search each sub
runner.submit(
- new MultiSearcherCallableNoSort(lock, subSearchers[i], weight, filter, nDocs, hq, leafContexts[i].docBase));
+ new SearcherCallableNoSort(lock, subSearchers[i], weight, filter, nDocs, hq));
}
int totalHits = 0;
@@ -434,7 +441,7 @@ public class IndexSearcher {
final ExecutionHelper<TopFieldDocs> runner = new ExecutionHelper<TopFieldDocs>(executor);
for (int i = 0; i < subSearchers.length; i++) { // search each sub
runner.submit(
- new MultiSearcherCallableWithSort(lock, subSearchers[i], weight, filter, nDocs, hq, sort, leafContexts[i].docBase));
+ new SearcherCallableWithSort(lock, subSearchers[i], weight, filter, nDocs, hq, sort));
}
int totalHits = 0;
float maxScore = Float.NEGATIVE_INFINITY;
@@ -493,7 +500,7 @@ public class IndexSearcher {
}
}
- private void searchWithFilter(ReaderContext context, Weight weight,
+ private void searchWithFilter(AtomicReaderContext context, Weight weight,
final Filter filter, final Collector collector) throws IOException {
assert filter != null;
@@ -621,7 +628,7 @@ public class IndexSearcher {
/**
* A thread subclass for searching a single searchable
*/
- private static final class MultiSearcherCallableNoSort implements Callable<TopDocs> {
+ private static final class SearcherCallableNoSort implements Callable<TopDocs> {
private final Lock lock;
private final IndexSearcher searchable;
@@ -629,17 +636,15 @@ public class IndexSearcher {
private final Filter filter;
private final int nDocs;
private final HitQueue hq;
- private final int docBase;
- public MultiSearcherCallableNoSort(Lock lock, IndexSearcher searchable, Weight weight,
- Filter filter, int nDocs, HitQueue hq, int docBase) {
+ public SearcherCallableNoSort(Lock lock, IndexSearcher searchable, Weight weight,
+ Filter filter, int nDocs, HitQueue hq) {
this.lock = lock;
this.searchable = searchable;
this.weight = weight;
this.filter = filter;
this.nDocs = nDocs;
this.hq = hq;
- this.docBase = docBase;
}
public TopDocs call() throws IOException {
@@ -647,7 +652,6 @@ public class IndexSearcher {
final ScoreDoc[] scoreDocs = docs.scoreDocs;
for (int j = 0; j < scoreDocs.length; j++) { // merge scoreDocs into hq
final ScoreDoc scoreDoc = scoreDocs[j];
- scoreDoc.doc += docBase; // convert doc
//it would be so nice if we had a thread-safe insert
lock.lock();
try {
@@ -665,7 +669,7 @@ public class IndexSearcher {
/**
* A thread subclass for searching a single searchable
*/
- private static final class MultiSearcherCallableWithSort implements Callable<TopFieldDocs> {
+ private static final class SearcherCallableWithSort implements Callable<TopFieldDocs> {
private final Lock lock;
private final IndexSearcher searchable;
@@ -673,37 +677,21 @@ public class IndexSearcher {
private final Filter filter;
private final int nDocs;
private final FieldDocSortedHitQueue hq;
- private final int docBase;
private final Sort sort;
- public MultiSearcherCallableWithSort(Lock lock, IndexSearcher searchable, Weight weight,
- Filter filter, int nDocs, FieldDocSortedHitQueue hq, Sort sort, int docBase) {
+ public SearcherCallableWithSort(Lock lock, IndexSearcher searchable, Weight weight,
+ Filter filter, int nDocs, FieldDocSortedHitQueue hq, Sort sort) {
this.lock = lock;
this.searchable = searchable;
this.weight = weight;
this.filter = filter;
this.nDocs = nDocs;
this.hq = hq;
- this.docBase = docBase;
this.sort = sort;
}
public TopFieldDocs call() throws IOException {
final TopFieldDocs docs = searchable.search (weight, filter, nDocs, sort);
- // If one of the Sort fields is FIELD_DOC, need to fix its values, so that
- // it will break ties by doc Id properly. Otherwise, it will compare to
- // 'relative' doc Ids, that belong to two different searchables.
- for (int j = 0; j < docs.fields.length; j++) {
- if (docs.fields[j].getType() == SortField.DOC) {
- // iterate over the score docs and change their fields value
- for (int j2 = 0; j2 < docs.scoreDocs.length; j2++) {
- FieldDoc fd = (FieldDoc) docs.scoreDocs[j2];
- fd.fields[j] = Integer.valueOf(((Integer) fd.fields[j]).intValue() + docBase);
- }
- break;
- }
- }
-
lock.lock();
try {
hq.setFields(docs.fields);
@@ -714,7 +702,6 @@ public class IndexSearcher {
final ScoreDoc[] scoreDocs = docs.scoreDocs;
for (int j = 0; j < scoreDocs.length; j++) { // merge scoreDocs into hq
final FieldDoc fieldDoc = (FieldDoc) scoreDocs[j];
- fieldDoc.doc += docBase; // convert doc
//it would be so nice if we had a thread-safe insert
lock.lock();
try {
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MatchAllDocsQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MatchAllDocsQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MatchAllDocsQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MatchAllDocsQuery.java Tue Jan 11 11:59:26 2011
@@ -18,7 +18,7 @@ package org.apache.lucene.search;
*/
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.util.ToStringUtils;
import org.apache.lucene.util.Bits;
@@ -127,13 +127,13 @@ public class MatchAllDocsQuery extends Q
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
return new MatchAllScorer(context.reader, similarity, this,
normsField != null ? context.reader.norms(normsField) : null);
}
@Override
- public Explanation explain(ReaderContext context, int doc) {
+ public Explanation explain(AtomicReaderContext context, int doc) {
// explain query weight
Explanation queryExpl = new ComplexExplanation
(true, getValue(), "MatchAllDocsQuery, product of:");
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.util.*;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.DocsAndPositionsEnum;
@@ -168,7 +168,7 @@ public class MultiPhraseQuery extends Qu
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
if (termArrays.size() == 0) // optimize zero-term case
return null;
final IndexReader reader = context.reader;
@@ -233,7 +233,7 @@ public class MultiPhraseQuery extends Qu
}
@Override
- public Explanation explain(ReaderContext context, int doc)
+ public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
ComplexExplanation result = new ComplexExplanation();
result.setDescription("weight("+getQuery()+" in "+doc+"), product of:");
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import org.apache.lucene.index.Fields;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.index.DocsEnum;
@@ -105,7 +105,7 @@ public class MultiTermQueryWrapperFilter
* results.
*/
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final IndexReader reader = context.reader;
final Fields fields = reader.fields();
if (fields == null) {
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/PhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/PhraseQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/PhraseQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/PhraseQuery.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.util.Set;
import java.util.ArrayList;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.DocsAndPositionsEnum;
import org.apache.lucene.index.IndexReader;
@@ -175,7 +175,7 @@ public class PhraseQuery extends Query {
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
if (terms.size() == 0) // optimize zero-term case
return null;
final IndexReader reader = context.reader;
@@ -221,7 +221,7 @@ public class PhraseQuery extends Query {
}
@Override
- public Explanation explain(ReaderContext context, int doc)
+ public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
Explanation result = new Explanation();
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/QueryWrapperFilter.java Tue Jan 11 11:59:26 2011
@@ -18,7 +18,8 @@ package org.apache.lucene.search;
*/
import java.io.IOException;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
/**
* Constrains search results to only match those which also match a provided
@@ -46,9 +47,10 @@ public class QueryWrapperFilter extends
}
@Override
- public DocIdSet getDocIdSet(final ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(final AtomicReaderContext context) throws IOException {
// get a private context that is used to rewrite, createWeight and score eventually
- final ReaderContext privateContext = context.reader.getTopReaderContext();
+ assert context.reader.getTopReaderContext().isAtomic;
+ final AtomicReaderContext privateContext = (AtomicReaderContext) context.reader.getTopReaderContext();
final Weight weight = query.weight(new IndexSearcher(privateContext));
return new DocIdSet() {
@Override
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/SpanQueryFilter.java Tue Jan 11 11:59:26 2011
@@ -17,7 +17,7 @@ package org.apache.lucene.search;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.Spans;
import org.apache.lucene.util.OpenBitSet;
@@ -53,7 +53,7 @@ public class SpanQueryFilter extends Spa
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
SpanFilterResult result = bitSpans(context.reader);
return result.getDocIdSet();
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/TermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/TermQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/TermQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/TermQuery.java Tue Jan 11 11:59:26 2011
@@ -42,9 +42,11 @@ public class TermQuery extends Query {
private float queryNorm;
private float queryWeight;
private IDFExplanation idfExp;
+ private transient ReaderContext weightContext; // only set if -ea for assert in scorer()
public TermWeight(IndexSearcher searcher)
throws IOException {
+ assert setWeightContext(searcher);
this.similarity = getSimilarity(searcher);
if (docFreq != -1) {
idfExp = similarity.idfExplain(term, searcher, docFreq);
@@ -77,7 +79,8 @@ public class TermQuery extends Query {
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ assert assertTopReaderContext(context);
final IndexReader reader = context.reader;
DocsEnum docs = reader.termDocsEnum(reader.getDeletedDocs(),
term.field(),
@@ -89,9 +92,21 @@ public class TermQuery extends Query {
return new TermScorer(this, docs, similarity, reader.norms(term.field()));
}
+
+ private boolean assertTopReaderContext(ReaderContext context) {
+ while (context.parent != null) {
+ context = context.parent;
+ }
+ return weightContext == context;
+ }
+
+ private boolean setWeightContext(IndexSearcher searcher) {
+ weightContext = searcher.getTopReaderContext();
+ return true;
+ }
@Override
- public Explanation explain(ReaderContext context, int doc)
+ public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
final IndexReader reader = context.reader;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Weight.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Weight.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Weight.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/Weight.java Tue Jan 11 11:59:26 2011
@@ -34,12 +34,9 @@ import org.apache.lucene.index.IndexRead
* {@link IndexReader} dependent state should reside in the {@link Scorer}.
* <p>
* Since {@link Weight} creates {@link Scorer} instances for a given
- * {@link ReaderContext} ({@link #scorer(ReaderContext, boolean, boolean)})
+ * {@link AtomicReaderContext} ({@link #scorer(AtomicReaderContext, boolean, boolean)})
* callers must maintain the relationship between the searcher's top-level
- * {@link ReaderContext} and the context used to create a {@link Scorer}. A
- * {@link ReaderContext} used to create a {@link Scorer} should be a leaf
- * context ({@link AtomicReaderContext}) of the searcher's top-level context,
- * otherwise the scorer's state will be undefined.
+ * {@link ReaderContext} and the context used to create a {@link Scorer}.
* <p>
* A <code>Weight</code> is used in the following way:
* <ol>
@@ -52,10 +49,9 @@ import org.apache.lucene.index.IndexRead
* <li>The query normalization factor is passed to {@link #normalize(float)}. At
* this point the weighting is complete.
* <li>A <code>Scorer</code> is constructed by
- * {@link #scorer(ReaderContext,boolean,boolean)}.
+ * {@link #scorer(AtomicReaderContext,boolean,boolean)}.
* </ol>
*
- *
* @since 2.9
*/
public abstract class Weight implements Serializable {
@@ -68,7 +64,7 @@ public abstract class Weight implements
* @return an Explanation for the score
* @throws IOException if an {@link IOException} occurs
*/
- public abstract Explanation explain(ReaderContext context, int doc) throws IOException;
+ public abstract Explanation explain(AtomicReaderContext context, int doc) throws IOException;
/** The query that this concerns. */
public abstract Query getQuery();
@@ -90,12 +86,9 @@ public abstract class Weight implements
* in-order.<br>
* <b>NOTE:</b> null can be returned if no documents will be scored by this
* query.
- * <b>NOTE: Calling this method with a {@link ReaderContext} that is not a
- * leaf context ({@link AtomicReaderContext}) of the searcher's top-level context
- * used to create this {@link Weight} instance can cause undefined behavior.
*
* @param context
- * the {@link ReaderContext} for which to return the {@link Scorer}.
+ * the {@link AtomicReaderContext} for which to return the {@link Scorer}.
* @param scoreDocsInOrder
* specifies whether in-order scoring of documents is required. Note
* that if set to false (i.e., out-of-order scoring is required),
@@ -111,8 +104,7 @@ public abstract class Weight implements
* @return a {@link Scorer} which scores documents in/out-of order.
* @throws IOException
*/
- // TODO make this context an AtomicContext if possible
- public abstract Scorer scorer(ReaderContext context, boolean scoreDocsInOrder,
+ public abstract Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
boolean topScorer) throws IOException;
/** The sum of squared weights of contained query clauses. */
@@ -122,7 +114,7 @@ public abstract class Weight implements
* Returns true iff this implementation scores docs only out of order. This
* method is used in conjunction with {@link Collector}'s
* {@link Collector#acceptsDocsOutOfOrder() acceptsDocsOutOfOrder} and
- * {@link #scorer(ReaderContext, boolean, boolean)} to
+ * {@link #scorer(AtomicReaderContext, boolean, boolean)} to
* create a matching {@link Scorer} instance for a given {@link Collector}, or
* vice versa.
* <p>
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/CustomScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/CustomScoreQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/CustomScoreQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/CustomScoreQuery.java Tue Jan 11 11:59:26 2011
@@ -22,7 +22,7 @@ import java.util.Set;
import java.util.Arrays;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.ComplexExplanation;
import org.apache.lucene.search.Explanation;
@@ -240,7 +240,7 @@ public class CustomScoreQuery extends Qu
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
// Pass true for "scoresDocsInOrder", because we
// require in-order scoring, even if caller does not,
// since we call advance on the valSrcScorers. Pass
@@ -258,12 +258,12 @@ public class CustomScoreQuery extends Qu
}
@Override
- public Explanation explain(ReaderContext context, int doc) throws IOException {
+ public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
Explanation explain = doExplain(context, doc);
return explain == null ? new Explanation(0.0f, "no matching docs") : explain;
}
- private Explanation doExplain(ReaderContext info, int doc) throws IOException {
+ private Explanation doExplain(AtomicReaderContext info, int doc) throws IOException {
Explanation subQueryExpl = subQueryWeight.explain(info, doc);
if (!subQueryExpl.isMatch()) {
return subQueryExpl;
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/ValueSourceQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/ValueSourceQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/ValueSourceQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/function/ValueSourceQuery.java Tue Jan 11 11:59:26 2011
@@ -19,7 +19,7 @@ package org.apache.lucene.search.functio
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.*;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.util.ToStringUtils;
import org.apache.lucene.util.Bits;
@@ -99,13 +99,13 @@ public class ValueSourceQuery extends Qu
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
return new ValueSourceScorer(similarity, context.reader, this);
}
/*(non-Javadoc) @see org.apache.lucene.search.Weight#explain(org.apache.lucene.index.IndexReader, int) */
@Override
- public Explanation explain(ReaderContext context, int doc) throws IOException {
+ public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
DocValues vals = valSrc.getValues(context.reader);
float sc = queryWeight * vals.floatVal(doc);
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java Tue Jan 11 11:59:26 2011
@@ -17,7 +17,7 @@ package org.apache.lucene.search.payload
* limitations under the License.
*/
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.IndexSearcher;
@@ -143,7 +143,7 @@ public class PayloadNearQuery extends Sp
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder,
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
boolean topScorer) throws IOException {
return new PayloadNearSpanScorer(query.getSpans(context.reader), this,
similarity, context.reader.norms(query.getField()));
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java Tue Jan 11 11:59:26 2011
@@ -17,7 +17,7 @@ package org.apache.lucene.search.payload
* limitations under the License.
*/
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.DocsAndPositionsEnum;
import org.apache.lucene.search.IndexSearcher;
@@ -74,7 +74,7 @@ public class PayloadTermQuery extends Sp
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder,
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder,
boolean topScorer) throws IOException {
return new PayloadTermSpanScorer((TermSpans) query.getSpans(context.reader),
this, similarity, context.reader.norms(query.getField()));
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java Tue Jan 11 11:59:26 2011
@@ -17,7 +17,7 @@ package org.apache.lucene.search.spans;
* limitations under the License.
*/
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.search.Explanation.IDFExplanation;
@@ -72,13 +72,13 @@ public class SpanWeight extends Weight {
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
return new SpanScorer(query.getSpans(context.reader), this, similarity, context.reader
.norms(query.getField()));
}
@Override
- public Explanation explain(ReaderContext context, int doc)
+ public Explanation explain(AtomicReaderContext context, int doc)
throws IOException {
ComplexExplanation result = new ComplexExplanation();
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/ReaderUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/ReaderUtil.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/ReaderUtil.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/ReaderUtil.java Tue Jan 11 11:59:26 2011
@@ -213,6 +213,21 @@ public final class ReaderUtil {
}
+ /**
+ * Returns the context's leaves or the context itself as the only element of
+ * the returned array. If the context's #leaves() method returns
+ * <code>null</code> the given context must be an instance of
+ * {@link AtomicReaderContext}
+ */
+ public static AtomicReaderContext[] leaves(ReaderContext context) {
+ assert context != null && context.isTopLevel : "context must be non-null & top-level";
+ final AtomicReaderContext[] leaves = context.leaves();
+ if (leaves == null) {
+ assert context.isAtomic : "top-level context without leaves must be atomic";
+ return new AtomicReaderContext[] { (AtomicReaderContext) context };
+ }
+ return leaves;
+ }
/**
* Returns index of the searcher/reader for document <code>n</code> in the
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/CachingWrapperFilterHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/CachingWrapperFilterHelper.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/CachingWrapperFilterHelper.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/CachingWrapperFilterHelper.java Tue Jan 11 11:59:26 2011
@@ -21,7 +21,7 @@ import java.io.IOException;
import junit.framework.Assert;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
/**
* A unit test helper class to test when the filter is getting cached and when it is not.
@@ -42,7 +42,7 @@ public class CachingWrapperFilterHelper
}
@Override
- public synchronized DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public synchronized DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
final int saveMissCount = missCount;
DocIdSet docIdSet = super.getDocIdSet(context);
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/JustCompileSearch.java Tue Jan 11 11:59:26 2011
@@ -20,7 +20,7 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.index.FieldInvertState;
import org.apache.lucene.util.PriorityQueue;
@@ -154,7 +154,7 @@ final class JustCompileSearch {
// still added here in case someone will add abstract methods in the future.
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
return null;
}
}
@@ -283,7 +283,7 @@ final class JustCompileSearch {
}
@Override
- public DocIdSet getDocIdSet(ReaderContext context) throws IOException {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
return null;
}
}
@@ -335,7 +335,7 @@ final class JustCompileSearch {
static final class JustCompileWeight extends Weight {
@Override
- public Explanation explain(ReaderContext context, int doc) throws IOException {
+ public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
throw new UnsupportedOperationException(UNSUPPORTED_MSG);
}
@@ -360,7 +360,7 @@ final class JustCompileSearch {
}
@Override
- public Scorer scorer(ReaderContext context, boolean scoreDocsInOrder, boolean topScorer)
+ public Scorer scorer(AtomicReaderContext context, boolean scoreDocsInOrder, boolean topScorer)
throws IOException {
throw new UnsupportedOperationException(UNSUPPORTED_MSG);
}
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/MockFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/MockFilter.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/MockFilter.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/MockFilter.java Tue Jan 11 11:59:26 2011
@@ -17,7 +17,7 @@ package org.apache.lucene.search;
* limitations under the License.
*/
-import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.util.DocIdBitSet;
import java.util.BitSet;
@@ -25,7 +25,7 @@ public class MockFilter extends Filter {
private boolean wasCalled;
@Override
- public DocIdSet getDocIdSet(ReaderContext context) {
+ public DocIdSet getDocIdSet(AtomicReaderContext context) {
wasCalled = true;
return new DocIdBitSet(new BitSet());
}
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/QueryUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/QueryUtils.java?rev=1057595&r1=1057594&r2=1057595&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/QueryUtils.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/QueryUtils.java Tue Jan 11 11:59:26 2011
@@ -13,13 +13,13 @@ import org.apache.lucene.analysis.MockAn
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
-import org.apache.lucene.index.IndexReader.ReaderContext;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockDirectoryWrapper;
import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.ReaderUtil;
import static org.apache.lucene.util.LuceneTestCase.TEST_VERSION_CURRENT;
@@ -213,21 +213,14 @@ public class QueryUtils {
}
}
- private static AtomicReaderContext[] getLeaves(IndexSearcher searcher) {
- ReaderContext topLevelReaderContext = searcher.getTopReaderContext();
- if (topLevelReaderContext.isAtomic) {
- return new AtomicReaderContext[] {(AtomicReaderContext) topLevelReaderContext};
- } else {
- return topLevelReaderContext.leaves();
- }
- }
+
/** alternate scorer skipTo(),skipTo(),next(),next(),skipTo(),skipTo(), etc
* and ensure a hitcollector receives same docs and scores
*/
public static void checkSkipTo(final Query q, final IndexSearcher s) throws IOException {
//System.out.println("Checking "+q);
- final AtomicReaderContext[] context = getLeaves(s);
+ final AtomicReaderContext[] context = ReaderUtil.leaves(s.getTopReaderContext());
if (q.weight(s).scoresDocsOutOfOrder()) return; // in this case order of skipTo() might differ from that of next().
final int skip_op = 0;
@@ -317,7 +310,7 @@ public class QueryUtils {
final IndexReader previousReader = lastReader[0];
IndexSearcher indexSearcher = new IndexSearcher(previousReader);
Weight w = q.weight(indexSearcher);
- Scorer scorer = w.scorer(indexSearcher.getTopReaderContext(), true, false);
+ Scorer scorer = w.scorer((AtomicReaderContext)indexSearcher.getTopReaderContext(), true, false);
if (scorer != null) {
boolean more = scorer.advance(lastDoc[0] + 1) != DocIdSetIterator.NO_MORE_DOCS;
Assert.assertFalse("query's last doc was "+ lastDoc[0] +" but skipTo("+(lastDoc[0]+1)+") got to "+scorer.docID(),more);
@@ -342,7 +335,7 @@ public class QueryUtils {
final IndexReader previousReader = lastReader[0];
IndexSearcher indexSearcher = new IndexSearcher(previousReader);
Weight w = q.weight(indexSearcher);
- Scorer scorer = w.scorer(previousReader.getTopReaderContext() , true, false);
+ Scorer scorer = w.scorer((AtomicReaderContext)previousReader.getTopReaderContext() , true, false);
if (scorer != null) {
boolean more = scorer.advance(lastDoc[0] + 1) != DocIdSetIterator.NO_MORE_DOCS;
Assert.assertFalse("query's last doc was "+ lastDoc[0] +" but skipTo("+(lastDoc[0]+1)+") got to "+scorer.docID(),more);
@@ -357,7 +350,7 @@ public class QueryUtils {
final float maxDiff = 1e-3f;
final int lastDoc[] = {-1};
final IndexReader lastReader[] = {null};
- final ReaderContext[] context = getLeaves(s);
+ final AtomicReaderContext[] context = ReaderUtil.leaves(s.getTopReaderContext());
s.search(q,new Collector() {
private Scorer scorer;
private int leafPtr;
@@ -399,7 +392,7 @@ public class QueryUtils {
final IndexReader previousReader = lastReader[0];
IndexSearcher indexSearcher = new IndexSearcher(previousReader);
Weight w = q.weight(indexSearcher);
- Scorer scorer = w.scorer(indexSearcher.getTopReaderContext(), true, false);
+ Scorer scorer = w.scorer((AtomicReaderContext)indexSearcher.getTopReaderContext(), true, false);
if (scorer != null) {
boolean more = scorer.advance(lastDoc[0] + 1) != DocIdSetIterator.NO_MORE_DOCS;
Assert.assertFalse("query's last doc was "+ lastDoc[0] +" but skipTo("+(lastDoc[0]+1)+") got to "+scorer.docID(),more);
@@ -422,7 +415,7 @@ public class QueryUtils {
final IndexReader previousReader = lastReader[0];
IndexSearcher indexSearcher = new IndexSearcher(previousReader);
Weight w = q.weight(indexSearcher);
- Scorer scorer = w.scorer(indexSearcher.getTopReaderContext(), true, false);
+ Scorer scorer = w.scorer((AtomicReaderContext)indexSearcher.getTopReaderContext(), true, false);
if (scorer != null) {
boolean more = scorer.advance(lastDoc[0] + 1) != DocIdSetIterator.NO_MORE_DOCS;
Assert.assertFalse("query's last doc was "+ lastDoc[0] +" but skipTo("+(lastDoc[0]+1)+") got to "+scorer.docID(),more);