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/20 10:52:36 UTC

[lucene-solr] branch branch_8x updated: SOLR-9802: fix grouping failure for date fields in solrcloud

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 437b744  SOLR-9802: fix grouping failure for date fields in solrcloud
437b744 is described below

commit 437b7445c6e0fbe9a361a4549ada3147cee4298f
Author: Munendra S N <mu...@apache.org>
AuthorDate: Sun Oct 20 15:57:19 2019 +0530

    SOLR-9802: fix grouping failure for date fields in solrcloud
    
    Closes #221
---
 solr/CHANGES.txt                                   |  2 ++
 .../distributed/command/GroupConverter.java        | 13 +++++------
 .../org/apache/solr/TestDistributedGrouping.java   |  7 ++++--
 .../test/org/apache/solr/TestGroupingSearch.java   | 25 ++++++++++++++++++++++
 4 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 17d55b3..125d618 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -53,6 +53,8 @@ Bug Fixes
 
 * SOLR-13403: Fix NPE in TermsComponent for DatePointField (yonik, Munendra S N)
 
+* SOLR-9802: Fix grouping failure for date field in solrcloud (Erick Erickson, Munendra S N, Vitaly Lavrov)
+
 Other Changes
 ---------------------
 
diff --git a/solr/core/src/java/org/apache/solr/search/grouping/distributed/command/GroupConverter.java b/solr/core/src/java/org/apache/solr/search/grouping/distributed/command/GroupConverter.java
index 0a21a62..3d27798 100644
--- a/solr/core/src/java/org/apache/solr/search/grouping/distributed/command/GroupConverter.java
+++ b/solr/core/src/java/org/apache/solr/search/grouping/distributed/command/GroupConverter.java
@@ -32,6 +32,7 @@ import org.apache.lucene.util.mutable.MutableValueDouble;
 import org.apache.lucene.util.mutable.MutableValueFloat;
 import org.apache.lucene.util.mutable.MutableValueInt;
 import org.apache.lucene.util.mutable.MutableValueLong;
+import org.apache.solr.common.util.Utils;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.NumberType;
 import org.apache.solr.schema.SchemaField;
@@ -50,11 +51,11 @@ class GroupConverter {
     FieldType fieldType = field.getType();
     List<SearchGroup<BytesRef>> result = new ArrayList<>(values.size());
     for (SearchGroup<MutableValue> original : values) {
-      SearchGroup<BytesRef> converted = new SearchGroup<BytesRef>();
+      SearchGroup<BytesRef> converted = new SearchGroup<>();
       converted.sortValues = original.sortValues;
       if (original.groupValue.exists) {
         BytesRefBuilder binary = new BytesRefBuilder();
-        fieldType.readableToIndexed(original.groupValue.toString(), binary);
+        fieldType.readableToIndexed(Utils.OBJECT_TO_STRING.apply(original.groupValue.toObject()), binary);
         converted.groupValue = binary.get();
       } else {
         converted.groupValue = null;
@@ -68,7 +69,7 @@ class GroupConverter {
     FieldType fieldType = field.getType();
     List<SearchGroup<MutableValue>> result = new ArrayList<>(values.size());
     for (SearchGroup<BytesRef> original : values) {
-      SearchGroup<MutableValue> converted = new SearchGroup<MutableValue>();
+      SearchGroup<MutableValue> converted = new SearchGroup<>();
       converted.sortValues = original.sortValues; // ?
       NumberType type = fieldType.getNumberType();
       final MutableValue v;
@@ -147,14 +148,14 @@ class GroupConverter {
       final BytesRef groupValue;
       if (original.groupValue.exists) {
         BytesRefBuilder binary = new BytesRefBuilder();
-        fieldType.readableToIndexed(original.groupValue.toString(), binary);
+        fieldType.readableToIndexed(Utils.OBJECT_TO_STRING.apply(original.groupValue.toObject()), binary);
         groupValue = binary.get();
       } else {
         groupValue = null;
       }
-      groupDocs[i] = new GroupDocs<BytesRef>(original.score, original.maxScore, original.totalHits, original.scoreDocs, groupValue, original.groupSortValues);
+      groupDocs[i] = new GroupDocs<>(original.score, original.maxScore, original.totalHits, original.scoreDocs, groupValue, original.groupSortValues);
     }
     
-    return new TopGroups<BytesRef>(values.groupSort, values.withinGroupSort, values.totalHitCount, values.totalGroupedHitCount, groupDocs, values.maxScore);
+    return new TopGroups<>(values.groupSort, values.withinGroupSort, values.totalHitCount, values.totalGroupedHitCount, groupDocs, values.maxScore);
   }
 }
diff --git a/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java b/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
index d16fbbe..1cba72f 100644
--- a/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
+++ b/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
@@ -57,8 +57,8 @@ public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
   String s1dv = "a_s_dvo";
   String b1dv = "a_b_dvo";
   String tlong = "other_tl1";
-  String tdate_a = "a_n_tdt";
-  String tdate_b = "b_n_tdt";
+  String tdate_a = "a_n_tdt1"; // use single-valued date field
+  String tdate_b = "b_n_tdt1";
   String oddField="oddField_s1";
 
   @Test
@@ -248,6 +248,9 @@ public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
         "group.query", t1 + ":kings OR " + t1 + ":eggs", "rows", "13", "start", "2",
         "fl", "id", "group.main", "true", "sort", i1 + " asc, id asc");
 
+    // SOLR-9802
+    query("q", "*:*", "group", "true", "group.field", tdate_a, "sort", i1 + " asc, id asc", "fl", "id");
+
     // SOLR-3109
     query("q", t1 + ":eggs", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", tlong + " asc, id asc");
     query("q", i1 + ":232", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", tlong + " asc, id asc");
diff --git a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
index b6460f6..d885484 100644
--- a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
+++ b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
@@ -34,6 +34,7 @@ import org.apache.solr.client.solrj.impl.BinaryResponseParser;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.GroupParams;
+import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.Utils;
 import org.apache.solr.index.LogDocMergePolicyFactory;
 import org.apache.solr.request.SolrQueryRequest;
@@ -699,6 +700,30 @@ public class TestGroupingSearch extends SolrTestCaseJ4 {
   }
 
   @Test
+  public void testGroupingOnDateField() throws Exception {
+    assertU(add(doc("id", "1",  "date_dt", "2012-11-20T00:00:00Z")));
+    assertU(add(doc("id", "2",  "date_dt", "2012-11-21T00:00:00Z")));
+    assertU(commit());
+
+    assertU(add(doc("id", "3",  "date_dt", "2012-11-20T00:00:00Z")));
+    assertU(add(doc("id", "4",  "date_dt", "2013-01-15T00:00:00Z")));
+    assertU(add(doc("id", "5")));
+    assertU(commit());
+
+    ModifiableSolrParams params = params("q", "*:*", "group.limit", "10",
+        "group", "true", "fl", "id", "group.ngroups", "true");
+
+    assertJQ(req(params, "group.field", "date_dt", "sort", "id asc"),
+        "/grouped=={'date_dt':{'matches':5,'ngroups':4, 'groups':" +
+            "[{'groupValue':'2012-11-20T00:00:00Z','doclist':{'numFound':2,'start':0,'docs':[{'id':'1'},{'id':'3'}]}}," +
+            "{'groupValue':'2012-11-21T00:00:00Z','doclist':{'numFound':1,'start':0,'docs':[{'id':'2'}]}}," +
+            "{'groupValue':'2013-01-15T00:00:00Z','doclist':{'numFound':1,'start':0,'docs':[{'id':'4'}]}}," +
+            "{'groupValue':null,'doclist':{'numFound':1,'start':0,'docs':[{'id':'5'}]}}" +
+            "]}}"
+    );
+  }
+
+  @Test
   public void testRandomGrouping() throws Exception {
     /**
      updateJ("{\"add\":{\"doc\":{\"id\":\"77\"}}}", params("commit","true"));