You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mv...@apache.org on 2015/04/08 17:51:24 UTC
svn commit: r1672110 -
/lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
Author: mvg
Date: Wed Apr 8 15:51:24 2015
New Revision: 1672110
URL: http://svn.apache.org/r1672110
Log:
LUCENE-6407: Simplify random tests and open one searcher per test round.
Fixes test bug where expected top docs and actual top docs are inconsistent.
Modified:
lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
Modified: lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java?rev=1672110&r1=1672109&r2=1672110&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java (original)
+++ lucene/dev/trunk/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java Wed Apr 8 15:51:24 2015
@@ -26,6 +26,7 @@ import org.apache.lucene.document.Sorted
import org.apache.lucene.document.SortedSetDocValuesField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.BinaryDocValues;
+import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.LeafReader;
@@ -281,25 +282,9 @@ public class TestJoinUtil extends Lucene
}
public void testRandomOrdinalsJoin() throws Exception {
- Directory dir = newDirectory();
- RandomIndexWriter w = new RandomIndexWriter(
- random(),
- dir,
- newIndexWriterConfig(new MockAnalyzer(random(), MockTokenizer.KEYWORD, false))
- );
- IndexIterationContext context = createContext(512, w, false, true);
- IndexReader topLevelReader = w.getReader();
-
- SortedDocValues[] values = new SortedDocValues[topLevelReader.leaves().size()];
- for (LeafReaderContext leadContext : topLevelReader.leaves()) {
- values[leadContext.ord] = DocValues.getSorted(leadContext.reader(), "join_field");
- }
- context.ordinalMap = MultiDocValues.OrdinalMap.build(
- topLevelReader.getCoreCacheKey(), values, PackedInts.DEFAULT
- );
-
+ IndexIterationContext context = createContext(512, false, true);
int searchIters = 10;
- IndexSearcher indexSearcher = newSearcher(topLevelReader);
+ IndexSearcher indexSearcher = context.searcher;
for (int i = 0; i < searchIters; i++) {
if (VERBOSE) {
System.out.println("search iter=" + i);
@@ -344,10 +329,7 @@ public class TestJoinUtil extends Lucene
TopDocs actualTopDocs = topScoreDocCollector.topDocs();
assertTopDocs(expectedTopDocs, actualTopDocs, scoreMode, indexSearcher, joinQuery);
}
-
- w.close();
- topLevelReader.close();
- dir.close();
+ context.close();
}
// TermsWithScoreCollector.MV.Avg forgets to grow beyond TermsWithScoreCollector.INITIAL_ARRAY_SIZE
@@ -623,21 +605,12 @@ public class TestJoinUtil extends Lucene
if (VERBOSE) {
System.out.println("indexIter=" + indexIter);
}
- Directory dir = newDirectory();
- RandomIndexWriter w = new RandomIndexWriter(
- random(),
- dir,
- newIndexWriterConfig(new MockAnalyzer(random(), MockTokenizer.KEYWORD, false)).setMergePolicy(newLogMergePolicy())
- );
- IndexIterationContext context = createContext(numberOfDocumentsToIndex, w, multipleValuesPerDocument, false);
-
- IndexReader topLevelReader = w.getReader();
- w.close();
+ IndexIterationContext context = createContext(numberOfDocumentsToIndex, multipleValuesPerDocument, false);
+ IndexSearcher indexSearcher = context.searcher;
for (int searchIter = 1; searchIter <= maxSearchIter; searchIter++) {
if (VERBOSE) {
System.out.println("searchIter=" + searchIter);
}
- IndexSearcher indexSearcher = newSearcher(topLevelReader);
int r = random().nextInt(context.randomUniqueValues.length);
boolean from = context.randomFrom[r];
@@ -674,8 +647,7 @@ public class TestJoinUtil extends Lucene
TopDocs actualTopDocs = topScoreDocCollector.topDocs();
assertTopDocs(expectedTopDocs, actualTopDocs, scoreMode, indexSearcher, joinQuery);
}
- topLevelReader.close();
- dir.close();
+ context.close();
}
}
@@ -718,15 +690,18 @@ public class TestJoinUtil extends Lucene
}
}
- private IndexIterationContext createContext(int nDocs, RandomIndexWriter writer, boolean multipleValuesPerDocument, boolean ordinalJoin) throws IOException {
- return createContext(nDocs, writer, writer, multipleValuesPerDocument, ordinalJoin);
- }
-
- private IndexIterationContext createContext(int nDocs, RandomIndexWriter fromWriter, RandomIndexWriter toWriter, boolean multipleValuesPerDocument, boolean globalOrdinalJoin) throws IOException {
+ private IndexIterationContext createContext(int nDocs, boolean multipleValuesPerDocument, boolean globalOrdinalJoin) throws IOException {
if (globalOrdinalJoin) {
assertFalse("ordinal join doesn't support multiple join values per document", multipleValuesPerDocument);
}
+ Directory dir = newDirectory();
+ RandomIndexWriter w = new RandomIndexWriter(
+ random(),
+ dir,
+ newIndexWriterConfig(new MockAnalyzer(random(), MockTokenizer.KEYWORD, false))
+ );
+
IndexIterationContext context = new IndexIterationContext();
int numRandomValues = nDocs / RandomInts.randomIntBetween(random(), 2, 10);
context.randomUniqueValues = new String[numRandomValues];
@@ -803,13 +778,6 @@ public class TestJoinUtil extends Lucene
}
}
- final RandomIndexWriter w;
- if (from) {
- w = fromWriter;
- } else {
- w = toWriter;
- }
-
w.addDocument(document);
if (random().nextInt(10) == 4) {
w.commit();
@@ -820,14 +788,14 @@ public class TestJoinUtil extends Lucene
}
if (random().nextBoolean()) {
- fromWriter.forceMerge(1);
- toWriter.forceMerge(1);
+ w.forceMerge(1);
}
+ w.close();
// Pre-compute all possible hits for all unique random values. On top of this also compute all possible score for
// any ScoreMode.
- IndexSearcher fromSearcher = newSearcher(fromWriter.getReader());
- IndexSearcher toSearcher = newSearcher(toWriter.getReader());
+ DirectoryReader topLevelReader = DirectoryReader.open(dir);
+ IndexSearcher searcher = newSearcher(topLevelReader);
for (int i = 0; i < context.randomUniqueValues.length; i++) {
String uniqueRandomValue = context.randomUniqueValues[i];
final String fromField;
@@ -844,7 +812,7 @@ public class TestJoinUtil extends Lucene
}
final Map<BytesRef, JoinScore> joinValueToJoinScores = new HashMap<>();
if (multipleValuesPerDocument) {
- fromSearcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new SimpleCollector() {
+ searcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new SimpleCollector() {
private Scorer scorer;
private SortedSetDocValues docTermOrds;
@@ -879,7 +847,7 @@ public class TestJoinUtil extends Lucene
}
});
} else {
- fromSearcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new SimpleCollector() {
+ searcher.search(new TermQuery(new Term("value", uniqueRandomValue)), new SimpleCollector() {
private Scorer scorer;
private BinaryDocValues terms;
@@ -922,7 +890,7 @@ public class TestJoinUtil extends Lucene
final Map<Integer, JoinScore> docToJoinScore = new HashMap<>();
if (multipleValuesPerDocument) {
- LeafReader slowCompositeReader = SlowCompositeReaderWrapper.wrap(toSearcher.getIndexReader());
+ LeafReader slowCompositeReader = SlowCompositeReaderWrapper.wrap(topLevelReader);
Terms terms = slowCompositeReader.terms(toField);
if (terms != null) {
PostingsEnum postingsEnum = null;
@@ -946,7 +914,7 @@ public class TestJoinUtil extends Lucene
}
}
} else {
- toSearcher.search(new MatchAllDocsQuery(), new SimpleCollector() {
+ searcher.search(new MatchAllDocsQuery(), new SimpleCollector() {
private BinaryDocValues terms;
private int docBase;
@@ -968,7 +936,8 @@ public class TestJoinUtil extends Lucene
}
@Override
- public void setScorer(Scorer scorer) {}
+ public void setScorer(Scorer scorer) {
+ }
@Override
public boolean needsScores() {
@@ -979,9 +948,18 @@ public class TestJoinUtil extends Lucene
queryVals.put(uniqueRandomValue, docToJoinScore);
}
- fromSearcher.getIndexReader().close();
- toSearcher.getIndexReader().close();
+ if (globalOrdinalJoin) {
+ SortedDocValues[] values = new SortedDocValues[topLevelReader.leaves().size()];
+ for (LeafReaderContext leadContext : topLevelReader.leaves()) {
+ values[leadContext.ord] = DocValues.getSorted(leadContext.reader(), "join_field");
+ }
+ context.ordinalMap = MultiDocValues.OrdinalMap.build(
+ topLevelReader.getCoreCacheKey(), values, PackedInts.DEFAULT
+ );
+ }
+ context.searcher = searcher;
+ context.dir = dir;
return context;
}
@@ -1068,6 +1046,15 @@ public class TestJoinUtil extends Lucene
Map<String, Map<Integer, JoinScore>> toHitsToJoinScore = new HashMap<>();
MultiDocValues.OrdinalMap ordinalMap;
+
+ Directory dir;
+ IndexSearcher searcher;
+
+ void close() throws IOException {
+ searcher.getIndexReader().close();
+ dir.close();
+ }
+
}
private static class RandomDoc {