LUCENE-6836: Fix reader context management with block-join sorting.

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1708209 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Adrien Grand 2015-10-12 19:34:33 +00:00
parent 5409ecb3d9
commit 1a68f4b67c
2 changed files with 9 additions and 6 deletions

View File

@ -20,6 +20,7 @@ package org.apache.lucene.search;
import java.io.IOException;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.ReaderUtil;
import org.apache.lucene.index.SortingMergePolicy;
import org.apache.lucene.util.BitSet;
@ -118,7 +119,7 @@ public class BlockJoinComparatorSource extends FieldComparatorSource {
if (parentBits != null) {
throw new IllegalStateException("This comparator can only be used on a single segment");
}
IndexSearcher searcher = new IndexSearcher(context.reader());
IndexSearcher searcher = new IndexSearcher(ReaderUtil.getTopLevelContext(context));
searcher.setQueryCache(null);
final Weight weight = searcher.createNormalizedWeight(parentsFilter, false);
final DocIdSetIterator parents = weight.scorer(context);

View File

@ -41,7 +41,6 @@ import org.junit.Ignore;
public class TestBlockJoinSorter extends LuceneTestCase {
@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/LUCENE-6836")
public void test() throws IOException {
final int numParents = atLeast(200);
IndexWriterConfig cfg = newIndexWriterConfig(new MockAnalyzer(random()));
@ -65,14 +64,17 @@ public class TestBlockJoinSorter extends LuceneTestCase {
writer.addDocuments(documents);
}
writer.forceMerge(1);
final DirectoryReader indexReader = writer.getReader();
IndexReader indexReader = writer.getReader();
writer.close();
final LeafReader reader = getOnlySegmentReader(indexReader);
IndexSearcher searcher = newSearcher(indexReader);
indexReader = searcher.getIndexReader(); // newSearcher may have wrapped it
assertEquals(1, indexReader.leaves().size());
final LeafReader reader = indexReader.leaves().get(0).reader();
final Query parentsFilter = new TermQuery(new Term("parent", "true"));
IndexSearcher searcher = newSearcher(reader);
final Weight weight = searcher.createNormalizedWeight(parentsFilter, false);
final DocIdSetIterator parents = weight.scorer(reader.getContext());
final DocIdSetIterator parents = weight.scorer(indexReader.leaves().get(0));
final BitSet parentBits = BitSet.of(parents, reader.maxDoc());
final NumericDocValues parentValues = reader.getNumericDocValues("parent_val");
final NumericDocValues childValues = reader.getNumericDocValues("child_val");