You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by GitBox <gi...@apache.org> on 2021/11/17 04:54:02 UTC

[GitHub] [lucene] zacharymorn commented on a change in pull request #444: LUCENE-10236: Updated field-weight used in CombinedFieldQuery scoring calculation, and added a test

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: issues-unsubscribe@lucene.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org