zacharymorn commented on a change in pull request #444:
URL: https://github.com/apache/lucene/pull/444#discussion_r750880606
##########
File path:
lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestCombinedFieldQuery.java
##########
@@ -165,6 +169,117 @@ public void testSameScore() throws IOException {
dir.close();
}
+ public void testSameScoreAndCollectionBetweenCompleteAndTopScores() throws
IOException {
Review comment:
This test was actually developed in another related PR
https://github.com/apache/lucene/pull/418, and it would generate duplicated
field-weight pairs in `fields` object to trigger the condition. As the existing
tests don't currently trigger that condition, I thought this would be a good
test to put in first for both PRs.
I guess if we were to have a focused test for this PR, it would still look
something very similar to this test (and `testCopyField`), maybe something like
the following, and it just ensures the test run through without assertion
exception. The delta between the tests are just I removed some doc content
randomizations and result comparison between TOP_SCORE and COMPLETE collection.
```
public void testShouldRunWithoutAssertionException() throws IOException {
int numDocs =
randomBoolean()
? atLeast(1000)
: atLeast(128 * 8 * 8 * 3); // make sure some terms have skip
data
int numMatchDoc = randomIntBetween(200, 500);
int numHits = atMost(100);
int boost1 = Math.max(1, random().nextInt(5));
int boost2 = Math.max(1, random().nextInt(5));
Directory dir = newDirectory();
Similarity similarity = randomCompatibleSimilarity();
IndexWriterConfig iwc = new IndexWriterConfig();
iwc.setSimilarity(similarity);
RandomIndexWriter w = new RandomIndexWriter(random(), dir, iwc);
// adding potentially matching doc
for (int i = 0; i < numMatchDoc; i++) {
Document doc = new Document();
int freqA = random().nextInt(20) + 1;
if (randomBoolean()) {
for (int j = 0; j < freqA; j++) {
doc.add(new TextField("a", "foo", Store.NO));
}
}
freqA = random().nextInt(20) + 1;
if (randomBoolean()) {
for (int j = 0; j < freqA; j++) {
doc.add(new TextField("a", "foo" + j, Store.NO));
}
}
freqA = random().nextInt(20) + 1;
if (randomBoolean()) {
for (int j = 0; j < freqA; j++) {
doc.add(new TextField("a", "zoo", Store.NO));
}
}
int freqB = random().nextInt(20) + 1;
if (randomBoolean()) {
for (int j = 0; j < freqB; j++) {
doc.add(new TextField("b", "zoo", Store.NO));
}
}
freqB = random().nextInt(20) + 1;
if (randomBoolean()) {
for (int j = 0; j < freqB; j++) {
doc.add(new TextField("b", "zoo" + j, Store.NO));
}
}
int freqC = random().nextInt(20) + 1;
for (int j = 0; j < freqC; j++) {
doc.add(new TextField("c", "bla" + j, Store.NO));
}
w.addDocument(doc);
}
IndexReader reader = w.getReader();
IndexSearcher searcher = newSearcher(reader);
searcher.setSimilarity(similarity);
CombinedFieldQuery query =
new CombinedFieldQuery.Builder()
.addField("a", (float) boost1)
.addField("b", (float) boost2)
.addTerm(new BytesRef("foo"))
.addTerm(new BytesRef("zoo"))
.build();
TopScoreDocCollector completeCollector =
TopScoreDocCollector.create(numHits, null, Integer.MAX_VALUE);
searcher.search(query, completeCollector);
reader.close();
w.close();
dir.close();
}
```
I guess I'm fine either way? If you prefer a more focused test, I can
replace it with the above one.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]