You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ji...@apache.org on 2019/01/02 08:37:20 UTC

lucene-solr:master: LUCENE-8627: Fix SearchAfter#testQueries to always count the number of hits accurately.

Repository: lucene-solr
Updated Branches:
  refs/heads/master 5016959ce -> 7c7036581


LUCENE-8627: Fix SearchAfter#testQueries to always count the number of hits accurately.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/7c703658
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/7c703658
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/7c703658

Branch: refs/heads/master
Commit: 7c70365811bb2800bdaf39302e187e8a9a180872
Parents: 5016959
Author: Jim Ferenczi <ji...@apache.org>
Authored: Wed Jan 2 09:37:10 2019 +0100
Committer: Jim Ferenczi <ji...@apache.org>
Committed: Wed Jan 2 09:37:10 2019 +0100

----------------------------------------------------------------------
 .../apache/lucene/search/TestSearchAfter.java   | 31 +++++++++++++++-----
 1 file changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7c703658/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java b/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
index 4d95c87..2ce677c 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java
@@ -216,14 +216,24 @@ public class TestSearchAfter extends LuceneTestCase {
     if (VERBOSE) {
       System.out.println("\nassertQuery " + (iter++) + ": query=" + query + " sort=" + sort + " pageSize=" + pageSize);
     }
-    final boolean doScores = random().nextBoolean();
+    final boolean doScores;
+    final TopDocsCollector allCollector;
     if (sort == null) {
-      all = searcher.search(query, maxDoc);
+      allCollector = TopScoreDocCollector.create(maxDoc, null, Integer.MAX_VALUE);
+      doScores = false;
     } else if (sort == Sort.RELEVANCE) {
-      all = searcher.search(query, maxDoc, sort, true);
+      allCollector = TopFieldCollector.create(sort, maxDoc, Integer.MAX_VALUE);
+      doScores = true;
     } else {
-      all = searcher.search(query, maxDoc, sort, doScores);
+      allCollector = TopFieldCollector.create(sort, maxDoc, Integer.MAX_VALUE);
+      doScores = random().nextBoolean();
     }
+    searcher.search(query, allCollector);
+    all = allCollector.topDocs();
+    if (doScores) {
+      TopFieldCollector.populateScores(all.scoreDocs, searcher, query);
+    }
+
     if (VERBOSE) {
       System.out.println("  all.totalHits.value=" + all.totalHits.value);
       int upto = 0;
@@ -235,21 +245,28 @@ public class TestSearchAfter extends LuceneTestCase {
     ScoreDoc lastBottom = null;
     while (pageStart < all.totalHits.value) {
       TopDocs paged;
+      final TopDocsCollector pagedCollector;
       if (sort == null) {
         if (VERBOSE) {
           System.out.println("  iter lastBottom=" + lastBottom);
         }
-        paged = searcher.searchAfter(lastBottom, query, pageSize);
+        pagedCollector = TopScoreDocCollector.create(pageSize, lastBottom, Integer.MAX_VALUE);
       } else {
         if (VERBOSE) {
           System.out.println("  iter lastBottom=" + lastBottom);
         }
         if (sort == Sort.RELEVANCE) {
-          paged = searcher.searchAfter(lastBottom, query, pageSize, sort, true);
+          pagedCollector = TopFieldCollector.create(sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE);
         } else {
-          paged = searcher.searchAfter(lastBottom, query, pageSize, sort, doScores);
+          pagedCollector = TopFieldCollector.create(sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE);
         }
       }
+      searcher.search(query, pagedCollector);
+      paged = pagedCollector.topDocs();
+      if (doScores) {
+        TopFieldCollector.populateScores(paged.scoreDocs, searcher, query);
+      }
+
       if (VERBOSE) {
         System.out.println("    " + paged.scoreDocs.length + " hits on page");
       }