SOLR-10033: return warning in response header about raising mincount above 0 with points fields

This commit is contained in:
Steve Rowe 2017-08-01 19:31:31 -04:00
parent 9c154ffbb8
commit 0e2ec280be
2 changed files with 31 additions and 2 deletions

View File

@ -497,7 +497,16 @@ public class SimpleFacets {
+ FacetParams.FACET_EXCLUDETERMS + ") are not supported on numeric types");
}
if (ft.isPointField() && mincount <= 0) { // default is mincount=0. See SOLR-10033 & SOLR-11174.
LOG.warn("Raising facet.mincount from " + mincount + " to 1, because field " + field + " is Points-based.");
String warningMessage
= "Raising facet.mincount from " + mincount + " to 1, because field " + field + " is Points-based.";
LOG.warn(warningMessage);
List<String> warnings = (List<String>)rb.rsp.getResponseHeader().get("warnings");
if (null == warnings) {
warnings = new ArrayList<>();
rb.rsp.getResponseHeader().add("warnings", warnings);
}
warnings.add(warningMessage);
mincount = 1;
}
counts = NumericFacets.getCounts(searcher, docs, field, offset, limit, mincount, missing, sort);

View File

@ -356,6 +356,26 @@ public class TestFaceting extends SolrTestCaseJ4 {
"//lst[@name='facet_fields']/lst[@name='f_td']/int[3][@name='-1.218']");
}
@Test
public void testFacetOverPointFieldWithMinCount0() {
String field = "f_" + new String[]{"i","l","f","d"}[random().nextInt(4)] + "_p";
String expectedWarning = "Raising facet.mincount from 0 to 1, because field " + field + " is Points-based.";
SolrQueryRequest req = req("q", "id:1.0",
FacetParams.FACET, "true",
FacetParams.FACET_FIELD, field,
FacetParams.FACET_MINCOUNT, "0");
assertQ(req
, "/response/lst[@name='responseHeader']/arr[@name='warnings']/str[.='" + expectedWarning + "']");
field = "f_" + new String[]{"is","ls","fs","ds"}[random().nextInt(4)] + "_p";
expectedWarning = "Raising facet.mincount from 0 to 1, because field " + field + " is Points-based.";
req = req("q", "id:1.0",
FacetParams.FACET, "true",
FacetParams.FACET_FIELD, field,
FacetParams.FACET_MINCOUNT, "0");
assertQ(req
, "/response/lst[@name='responseHeader']/arr[@name='warnings']/str[.='" + expectedWarning + "']");
}
public void testSimpleFacetCountsWithMultipleConfigurationsForSameField() {
clearIndex();