You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mu...@apache.org on 2019/10/24 05:03:41 UTC

[lucene-solr] branch branch_8x updated: SOLR-13403: test terms component with point fields on empty index

This is an automated email from the ASF dual-hosted git repository.

munendrasn pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 255bdae  SOLR-13403: test terms component with point fields on empty index
255bdae is described below

commit 255bdaebbc0d37c9e341ec5aaab65dde05179c40
Author: Munendra S N <mu...@apache.org>
AuthorDate: Thu Oct 24 10:06:16 2019 +0530

    SOLR-13403: test terms component with point fields on empty index
---
 .../solr/handler/component/TermsComponent.java     |   8 +-
 .../java/org/apache/solr/search/PointMerger.java   |   3 +
 .../component/DistributedTermsComponentTest.java   |  12 ++-
 .../solr/handler/component/TermsComponentTest.java | 100 ++++++++++++---------
 4 files changed, 70 insertions(+), 53 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
index 4a4841a..bdcfbec 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
@@ -207,9 +207,9 @@ public class TermsComponent extends SearchComponent {
                 String.format(Locale.ROOT, "The terms component does not support Points-based fields with sorting or with parameters %s,%s,%s,%s ", TermsParams.TERMS_LOWER, TermsParams.TERMS_UPPER, TermsParams.TERMS_PREFIX_STR, TermsParams.TERMS_REGEXP_STR));
           }
 
+          PointMerger.ValueIterator valueIterator = new PointMerger.ValueIterator(sf, rb.req.getSearcher().getRawReader().leaves());
+          MutableValue mv = valueIterator.getMutableValue();
           if (sort) {
-            PointMerger.ValueIterator valueIterator = new PointMerger.ValueIterator(sf, rb.req.getSearcher().getRawReader().leaves());
-            MutableValue mv = valueIterator.getMutableValue();
             BoundedTreeSet<CountPair<MutableValue, Integer>> queue = new BoundedTreeSet<>(limit);
 
             for (; ; ) {
@@ -230,8 +230,6 @@ public class TermsComponent extends SearchComponent {
             // streaming solution that is deferred until writing the response
             // TODO: we can't use the streaming solution until XML writer supports PushWriter!
             termsResult.add(field, (MapWriter) ew -> {
-              PointMerger.ValueIterator valueIterator = new PointMerger.ValueIterator(sf, rb.req.getSearcher().getRawReader().leaves());
-              MutableValue mv = valueIterator.getMutableValue();
               int num = 0;
               for(;;) {
                 long count = valueIterator.getNextCount();
@@ -243,8 +241,6 @@ public class TermsComponent extends SearchComponent {
             });
              ***/
 
-            PointMerger.ValueIterator valueIterator = new PointMerger.ValueIterator(sf, rb.req.getSearcher().getRawReader().leaves());
-            MutableValue mv = valueIterator.getMutableValue();
             int num = 0;
             for(;;) {
               long count = valueIterator.getNextCount();
diff --git a/solr/core/src/java/org/apache/solr/search/PointMerger.java b/solr/core/src/java/org/apache/solr/search/PointMerger.java
index a2d9ade..2dcb552 100644
--- a/solr/core/src/java/org/apache/solr/search/PointMerger.java
+++ b/solr/core/src/java/org/apache/solr/search/PointMerger.java
@@ -57,6 +57,9 @@ public class PointMerger {
     public ValueIterator(SchemaField field, List<LeafReaderContext> readers, int totalBufferSize, int minSegBufferSize) throws IOException {
       assert field.getType().isPointField();
       queue = new PQueue(readers.size());
+      if (readers.isEmpty()) {
+        return;
+      }
       long ndocs = readers.get(readers.size()-1).docBase + readers.get(readers.size()-1).reader().maxDoc();
       for (LeafReaderContext ctx : readers) {
         PointValues pv = ctx.reader().getPointValues(field.getName());
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DistributedTermsComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/DistributedTermsComponentTest.java
index d01e648..0b6bfcd 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DistributedTermsComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DistributedTermsComponentTest.java
@@ -36,9 +36,16 @@ public class DistributedTermsComponentTest extends BaseDistributedSearchTestCase
 
   @Test
   public void test() throws Exception {
-    
     Random random = random();
     del("*:*");
+
+    index(id, random.nextInt(), "b_t", "snake a,b spider shark snail slug seal", "foo_i_p", "1");
+    query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "foo_i_p");
+    del("*:*");
+
+    // verify point field on empty index
+    query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "foo_i_p");
+
     index(id, random.nextInt(), "b_t", "snake a,b spider shark snail slug seal", "foo_i", "1");
     index(id, random.nextInt(), "b_t", "snake spider shark snail slug", "foo_i", "2", "foo_date_p", "2015-01-03T14:30:00Z");
     index(id, random.nextInt(), "b_t", "snake spider shark snail", "foo_i", "3");
@@ -67,9 +74,8 @@ public class DistributedTermsComponentTest extends BaseDistributedSearchTestCase
     query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "b_t", "terms.list", "snake,zebra", "terms.ttf", "true");
     query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "b_t", "terms.fl", "c_t", "terms.list", "snake,ant,zebra", "terms.ttf", "true");
 
-    // TODO: SOLR-13403 fix distributed failure case
     // for date point field
-    //query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "foo_date_p");
+    query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "foo_date_p");
     // terms.ttf=true doesn't work for point fields
     //query("qt", "/terms", "shards.qt", "/terms", "terms", "true", "terms.fl", "foo_date_p", "terms.ttf", "true");
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java
index 5ad1429..56f0d69 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java
@@ -29,6 +29,7 @@ import org.apache.solr.common.params.TermsParams;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.PointMerger;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -39,40 +40,47 @@ public class TermsComponentTest extends SolrTestCaseJ4 {
   public static void beforeTest() throws Exception {
     System.setProperty("enable.update.log", "false"); // schema12 doesn't support _version_
     initCore("solrconfig.xml", "schema12.xml");
+  }
+
+  @Before
+  public void createIndex() {
+    // cleanup first
+    assertU(delQ("*:*"));
+    assertU(commit());
+
+    assertU(adoc("id", "0", "lowerfilt", "a", "standardfilt", "a", "foo_i", "1"));
+    assertU(adoc("id", "1", "lowerfilt", "a", "standardfilt", "aa", "foo_i","1"));
+    assertU(adoc("id", "2", "lowerfilt", "aa", "standardfilt", "aaa", "foo_i","2"));
+    assertU(adoc("id", "3", "lowerfilt", "aaa", "standardfilt", "abbb"));
+    assertU(adoc("id", "4", "lowerfilt", "ab", "standardfilt", "b"));
+    assertU(adoc("id", "5", "lowerfilt", "abb", "standardfilt", "bb"));
+    assertU(adoc("id", "6", "lowerfilt", "abc", "standardfilt", "bbbb"));
+    assertU(adoc("id", "7", "lowerfilt", "b", "standardfilt", "c"));
+    assertU(adoc("id", "8", "lowerfilt", "baa", "standardfilt", "cccc"));
+    assertU(adoc("id", "9", "lowerfilt", "bbb", "standardfilt", "ccccc"));
+
+
+    assertU(adoc("id", "10", "standardfilt", "ddddd"));
+    assertU(commit());
+
+    assertU(adoc("id", "11", "standardfilt", "ddddd"));
+    assertU(adoc("id", "12", "standardfilt", "ddddd"));
+    assertU(adoc("id", "13", "standardfilt", "ddddd"));
+    assertU(adoc("id", "14", "standardfilt", "d"));
+    assertU(adoc("id", "15", "standardfilt", "d"));
+    assertU(adoc("id", "16", "standardfilt", "d"));
+
+    assertU(commit());
+
+    assertU(adoc("id", "17", "standardfilt", "snake"));
+    assertU(adoc("id", "18", "standardfilt", "spider"));
+    assertU(adoc("id", "19", "standardfilt", "shark"));
+    assertU(adoc("id", "20", "standardfilt", "snake"));
+    assertU(adoc("id", "21", "standardfilt", "snake"));
+    assertU(adoc("id", "22", "standardfilt", "shark"));
+    assertU(adoc("id", "23", "standardfilt", "a,b"));
 
-    assertNull(h.validateUpdate(adoc("id", "0", "lowerfilt", "a", "standardfilt", "a", "foo_i", "1")));
-    assertNull(h.validateUpdate(adoc("id", "1", "lowerfilt", "a", "standardfilt", "aa", "foo_i","1")));
-    assertNull(h.validateUpdate(adoc("id", "2", "lowerfilt", "aa", "standardfilt", "aaa", "foo_i","2")));
-    assertNull(h.validateUpdate(adoc("id", "3", "lowerfilt", "aaa", "standardfilt", "abbb")));
-    assertNull(h.validateUpdate(adoc("id", "4", "lowerfilt", "ab", "standardfilt", "b")));
-    assertNull(h.validateUpdate(adoc("id", "5", "lowerfilt", "abb", "standardfilt", "bb")));
-    assertNull(h.validateUpdate(adoc("id", "6", "lowerfilt", "abc", "standardfilt", "bbbb")));
-    assertNull(h.validateUpdate(adoc("id", "7", "lowerfilt", "b", "standardfilt", "c")));
-    assertNull(h.validateUpdate(adoc("id", "8", "lowerfilt", "baa", "standardfilt", "cccc")));
-    assertNull(h.validateUpdate(adoc("id", "9", "lowerfilt", "bbb", "standardfilt", "ccccc")));
-
-
-    assertNull(h.validateUpdate(adoc("id", "10", "standardfilt", "ddddd")));
-
-    assertNull(h.validateUpdate(commit()));
-    assertNull(h.validateUpdate(adoc("id", "11", "standardfilt", "ddddd")));
-    assertNull(h.validateUpdate(adoc("id", "12", "standardfilt", "ddddd")));
-    assertNull(h.validateUpdate(adoc("id", "13", "standardfilt", "ddddd")));
-    assertNull(h.validateUpdate(adoc("id", "14", "standardfilt", "d")));
-    assertNull(h.validateUpdate(adoc("id", "15", "standardfilt", "d")));
-    assertNull(h.validateUpdate(adoc("id", "16", "standardfilt", "d")));
-
-    assertNull(h.validateUpdate(commit()));
-
-    assertNull(h.validateUpdate(adoc("id", "17", "standardfilt", "snake")));
-    assertNull(h.validateUpdate(adoc("id", "18", "standardfilt", "spider")));
-    assertNull(h.validateUpdate(adoc("id", "19", "standardfilt", "shark")));
-    assertNull(h.validateUpdate(adoc("id", "20", "standardfilt", "snake")));
-    assertNull(h.validateUpdate(adoc("id", "21", "standardfilt", "snake")));
-    assertNull(h.validateUpdate(adoc("id", "22", "standardfilt", "shark")));
-    assertNull(h.validateUpdate(adoc("id", "23", "standardfilt", "a,b")));
-
-    assertNull(h.validateUpdate(commit()));
+    assertU(commit());
   }
 
   @Test
@@ -594,16 +602,20 @@ public class TermsComponentTest extends SolrTestCaseJ4 {
     assertU(adoc("id", Integer.toString(100102), "foo_pdt", dates[1]));
     assertU(commit());
 
-    try {
-      assertQ(req("indent","true", "qt","/terms", "terms","true",
-          "terms.fl","foo_pdt", "terms.sort","count"),
-          "count(//lst[@name='foo_pdt']/*)=2",
-          "//lst[@name='foo_pdt']/int[1][@name='" + dates[1] + "'][.='51']",
-          "//lst[@name='foo_pdt']/int[2][@name='" + dates[0] + "'][.='50']"
-      );
-    } finally {
-      assertU(delQ("foo_pdt:[* TO *]"));
-      assertU(commit());
-    }
+    assertQ(req("indent","true", "qt","/terms", "terms","true",
+        "terms.fl","foo_pdt", "terms.sort","count"),
+        "count(//lst[@name='foo_pdt']/*)=2",
+        "//lst[@name='foo_pdt']/int[1][@name='" + dates[1] + "'][.='51']",
+        "//lst[@name='foo_pdt']/int[2][@name='" + dates[0] + "'][.='50']"
+    );
+
+    // test on empty index
+    assertU(delQ("*:*"));
+    assertU(commit());
+
+    assertQ(req("indent","true", "qt","/terms", "terms","true",
+        "terms.fl","foo_pdt", "terms.sort","count"),
+        "count(//lst[@name='foo_pdt']/*)=0"
+    );
   }
 }