Skip to content

Commit cd61ed4

Browse files
dsmileyjpountz
authored andcommitted
Tests: TestLongNormValueSource, AssertingScorable (apache#14448)
TestLongNormValueSource: improve AssortingScorable: don't wrap needlessly
1 parent f2a89c7 commit cd61ed4

File tree

1 file changed

+35
-66
lines changed

1 file changed

+35
-66
lines changed

lucene/queries/src/test/org/apache/lucene/queries/function/TestLongNormValueSource.java

Lines changed: 35 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -16,99 +16,68 @@
1616
*/
1717
package org.apache.lucene.queries.function;
1818

19-
import org.apache.lucene.analysis.Analyzer;
2019
import org.apache.lucene.document.Document;
21-
import org.apache.lucene.document.Field;
20+
import org.apache.lucene.document.Field.Store;
21+
import org.apache.lucene.document.StringField;
2222
import org.apache.lucene.document.TextField;
23-
import org.apache.lucene.index.IndexReader;
2423
import org.apache.lucene.index.IndexWriterConfig;
2524
import org.apache.lucene.queries.function.valuesource.NormValueSource;
2625
import org.apache.lucene.search.IndexSearcher;
2726
import org.apache.lucene.search.Query;
2827
import org.apache.lucene.search.ScoreDoc;
2928
import org.apache.lucene.search.Sort;
30-
import org.apache.lucene.search.SortField;
3129
import org.apache.lucene.search.TopDocs;
3230
import org.apache.lucene.search.similarities.ClassicSimilarity;
3331
import org.apache.lucene.search.similarities.Similarity;
34-
import org.apache.lucene.store.Directory;
3532
import org.apache.lucene.tests.analysis.MockAnalyzer;
3633
import org.apache.lucene.tests.index.RandomIndexWriter;
3734
import org.apache.lucene.tests.search.CheckHits;
3835
import org.apache.lucene.tests.util.LuceneTestCase;
39-
import org.junit.AfterClass;
40-
import org.junit.BeforeClass;
4136

4237
public class TestLongNormValueSource extends LuceneTestCase {
4338

44-
static Directory dir;
45-
static IndexReader reader;
46-
static IndexSearcher searcher;
47-
static Analyzer analyzer;
48-
49-
private static final Similarity sim = new ClassicSimilarity();
50-
51-
@BeforeClass
52-
public static void beforeClass() throws Exception {
53-
dir = newDirectory();
54-
analyzer = new MockAnalyzer(random());
39+
public void testNorm() throws Exception {
40+
Similarity sim = new ClassicSimilarity();
41+
final var field = "text";
42+
var analyzer = new MockAnalyzer(random());
43+
var dir = newDirectory();
5544
IndexWriterConfig iwConfig = newIndexWriterConfig(analyzer);
5645
iwConfig.setMergePolicy(newLogMergePolicy());
5746
iwConfig.setSimilarity(sim);
58-
RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwConfig);
5947

60-
Document doc = new Document();
61-
doc.add(new TextField("text", "this is a test test test", Field.Store.NO));
62-
iw.addDocument(doc);
48+
try (RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwConfig)) {
6349

64-
doc = new Document();
65-
doc.add(new TextField("text", "second test", Field.Store.NO));
66-
iw.addDocument(doc);
50+
// the leading number is the number of terms / positions for that value
51+
final var store = Store.YES;
52+
Document doc = new Document();
53+
doc.add(new StringField("id", "6", store));
54+
doc.add(new TextField(field, "this is a test test test", store));
55+
iw.addDocument(doc);
6756

68-
reader = iw.getReader();
69-
searcher = newSearcher(reader);
70-
iw.close();
71-
}
57+
doc = new Document();
58+
doc.add(new StringField("id", "2", store));
59+
doc.add(new TextField(field, "second test", store));
60+
iw.addDocument(doc);
7261

73-
@AfterClass
74-
public static void afterClass() throws Exception {
75-
searcher = null;
76-
reader.close();
77-
reader = null;
78-
dir.close();
79-
dir = null;
80-
analyzer.close();
81-
analyzer = null;
82-
}
62+
IndexSearcher searcher;
63+
try (var reader = iw.getReader()) {
64+
searcher = newSearcher(reader);
65+
searcher.setSimilarity(sim);
8366

84-
public void testNorm() throws Exception {
85-
Similarity saved = searcher.getSimilarity();
86-
try {
87-
// no norm field (so agnostic to indexed similarity)
88-
searcher.setSimilarity(sim);
89-
assertHits(new FunctionQuery(new NormValueSource("text")), new float[] {0f, 0f});
67+
Query q = new FunctionQuery(new NormValueSource(field));
68+
TopDocs docs = searcher.search(q, searcher.getIndexReader().numDocs(), new Sort(), true);
69+
final var expectedDocIds = new int[] {1, 0};
70+
final var expectedScoreDocs =
71+
new ScoreDoc[] {new ScoreDoc(1, 0.70710677f), new ScoreDoc(0, 0.4082483f)};
72+
CheckHits.checkHitsQuery(q, expectedScoreDocs, docs.scoreDocs, expectedDocIds);
73+
CheckHits.checkExplanations(q, "", searcher);
74+
final var storedFields = searcher.getIndexReader().storedFields();
75+
assertEquals("2", storedFields.document(expectedDocIds[0]).get("id"));
76+
assertEquals("6", storedFields.document(expectedDocIds[1]).get("id"));
77+
}
9078
} finally {
91-
searcher.setSimilarity(saved);
79+
dir.close();
80+
analyzer.close();
9281
}
9382
}
94-
95-
void assertHits(Query q, float[] scores) throws Exception {
96-
ScoreDoc[] expected = new ScoreDoc[scores.length];
97-
int[] expectedDocs = new int[scores.length];
98-
for (int i = 0; i < expected.length; i++) {
99-
expectedDocs[i] = i;
100-
expected[i] = new ScoreDoc(i, scores[i]);
101-
}
102-
TopDocs docs = searcher.search(q, 2, new Sort(new SortField("id", SortField.Type.STRING)));
103-
104-
/*
105-
for (int i=0;i<docs.scoreDocs.length;i++) {
106-
System.out.println(searcher.explain(q, docs.scoreDocs[i].doc));
107-
}
108-
*/
109-
110-
CheckHits.checkHits(random(), q, "", searcher, expectedDocs);
111-
CheckHits.checkHitsQuery(q, expected, docs.scoreDocs, expectedDocs);
112-
CheckHits.checkExplanations(q, "", searcher);
113-
}
11483
}

0 commit comments

Comments
 (0)