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"));