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-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
|
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.MutableValueFloat;
|
||||||
import org.apache.lucene.util.mutable.MutableValueInt;
|
import org.apache.lucene.util.mutable.MutableValueInt;
|
||||||
import org.apache.lucene.util.mutable.MutableValueLong;
|
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.FieldType;
|
||||||
import org.apache.solr.schema.NumberType;
|
import org.apache.solr.schema.NumberType;
|
||||||
import org.apache.solr.schema.SchemaField;
|
import org.apache.solr.schema.SchemaField;
|
||||||
@ -50,11 +51,11 @@ class GroupConverter {
|
|||||||
FieldType fieldType = field.getType();
|
FieldType fieldType = field.getType();
|
||||||
List<SearchGroup<BytesRef>> result = new ArrayList<>(values.size());
|
List<SearchGroup<BytesRef>> result = new ArrayList<>(values.size());
|
||||||
for (SearchGroup<MutableValue> original : values) {
|
for (SearchGroup<MutableValue> original : values) {
|
||||||
SearchGroup<BytesRef> converted = new SearchGroup<BytesRef>();
|
SearchGroup<BytesRef> converted = new SearchGroup<>();
|
||||||
converted.sortValues = original.sortValues;
|
converted.sortValues = original.sortValues;
|
||||||
if (original.groupValue.exists) {
|
if (original.groupValue.exists) {
|
||||||
BytesRefBuilder binary = new BytesRefBuilder();
|
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();
|
converted.groupValue = binary.get();
|
||||||
} else {
|
} else {
|
||||||
converted.groupValue = null;
|
converted.groupValue = null;
|
||||||
@ -68,7 +69,7 @@ class GroupConverter {
|
|||||||
FieldType fieldType = field.getType();
|
FieldType fieldType = field.getType();
|
||||||
List<SearchGroup<MutableValue>> result = new ArrayList<>(values.size());
|
List<SearchGroup<MutableValue>> result = new ArrayList<>(values.size());
|
||||||
for (SearchGroup<BytesRef> original : values) {
|
for (SearchGroup<BytesRef> original : values) {
|
||||||
SearchGroup<MutableValue> converted = new SearchGroup<MutableValue>();
|
SearchGroup<MutableValue> converted = new SearchGroup<>();
|
||||||
converted.sortValues = original.sortValues; // ?
|
converted.sortValues = original.sortValues; // ?
|
||||||
NumberType type = fieldType.getNumberType();
|
NumberType type = fieldType.getNumberType();
|
||||||
final MutableValue v;
|
final MutableValue v;
|
||||||
@ -147,14 +148,14 @@ class GroupConverter {
|
|||||||
final BytesRef groupValue;
|
final BytesRef groupValue;
|
||||||
if (original.groupValue.exists) {
|
if (original.groupValue.exists) {
|
||||||
BytesRefBuilder binary = new BytesRefBuilder();
|
BytesRefBuilder binary = new BytesRefBuilder();
|
||||||
fieldType.readableToIndexed(original.groupValue.toString(), binary);
|
fieldType.readableToIndexed(Utils.OBJECT_TO_STRING.apply(original.groupValue.toObject()), binary);
|
||||||
groupValue = binary.get();
|
groupValue = binary.get();
|
||||||
} else {
|
} else {
|
||||||
groupValue = null;
|
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 s1dv = "a_s_dvo";
|
||||||
String b1dv = "a_b_dvo";
|
String b1dv = "a_b_dvo";
|
||||||
String tlong = "other_tl1";
|
String tlong = "other_tl1";
|
||||||
String tdate_a = "a_n_tdt";
|
String tdate_a = "a_n_tdt1"; // use single-valued date field
|
||||||
String tdate_b = "b_n_tdt";
|
String tdate_b = "b_n_tdt1";
|
||||||
String oddField="oddField_s1";
|
String oddField="oddField_s1";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -248,6 +248,9 @@ public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
|
|||||||
"group.query", t1 + ":kings OR " + t1 + ":eggs", "rows", "13", "start", "2",
|
"group.query", t1 + ":kings OR " + t1 + ":eggs", "rows", "13", "start", "2",
|
||||||
"fl", "id", "group.main", "true", "sort", i1 + " asc, id asc");
|
"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
|
// 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", 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");
|
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.SolrException;
|
||||||
import org.apache.solr.common.params.CommonParams;
|
import org.apache.solr.common.params.CommonParams;
|
||||||
import org.apache.solr.common.params.GroupParams;
|
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.common.util.Utils;
|
||||||
import org.apache.solr.index.LogDocMergePolicyFactory;
|
import org.apache.solr.index.LogDocMergePolicyFactory;
|
||||||
import org.apache.solr.request.SolrQueryRequest;
|
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
|
@Test
|
||||||
public void testRandomGrouping() throws Exception {
|
public void testRandomGrouping() throws Exception {
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user