mirror of
https://github.com/apache/lucene.git
synced 2025-02-24 19:25:10 +00:00
SOLR-9802: fix grouping failure for date fields in solrcloud
Closes #221
This commit is contained in:
parent
c65451115c
commit
437b7445c6
@ -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
|
||||
---------------------
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
@ -698,6 +699,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 {
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user