You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2015/04/25 07:12:53 UTC
svn commit: r1675995 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/request/
solr/core/src/test-files/solr/collection1/conf/
solr/core/src/test/org/apache/solr/request/
Author: tflobbe
Date: Sat Apr 25 05:12:53 2015
New Revision: 1675995
URL: http://svn.apache.org/r1675995
Log:
SOLR-7471: Stop requiring docValues for interval faceting
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Sat Apr 25 05:12:53 2015
@@ -165,6 +165,8 @@ Other Changes
* SOLR-7467: Upgrade t-digest to 3.1 (hossman)
+* SOLR-7471: Stop requiring docValues for interval faceting (Tomás Fernández Löbbe)
+
================== 5.1.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java Sat Apr 25 05:12:53 2015
@@ -98,7 +98,6 @@ import java.util.concurrent.FutureTask;
import java.util.concurrent.RunnableFuture;
import java.util.concurrent.Semaphore;
import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
@@ -1733,9 +1732,6 @@ public class SimpleFacets {
parseParams(FacetParams.FACET_INTERVAL, field);
String[] intervalStrs = required.getFieldParams(facetValue, FacetParams.FACET_INTERVAL_SET);
SchemaField schemaField = searcher.getCore().getLatestSchema().getField(facetValue);
- if (!schemaField.hasDocValues()) {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Interval Faceting only on fields with doc values");
- }
if (params.getBool(GroupParams.GROUP_FACET, false)) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Interval Faceting can't be used with " + GroupParams.GROUP_FACET);
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml Sat Apr 25 05:12:53 2015
@@ -39,12 +39,15 @@
<dynamicField name="*_ss_dv" type="string" indexed="false" stored="false" docValues="true" multiValued="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="false" docValues="false"/>
<dynamicField name="*_f_dv" type="float" indexed="true" stored="false" docValues="true"/>
+ <dynamicField name="*_fs" type="float" indexed="true" stored="false" docValues="false" multiValued="true"/>
<dynamicField name="*_fs_dv" type="float" indexed="true" stored="false" docValues="true" multiValued="true"/>
<dynamicField name="*_l" type="long" indexed="true" stored="false" docValues="false"/>
<dynamicField name="*_l_dv" type="long" indexed="true" stored="false" docValues="true"/>
+ <dynamicField name="*_ls" type="long" indexed="true" stored="false" docValues="false" multiValued="true"/>
<dynamicField name="*_ls_dv" type="long" indexed="true" stored="false" docValues="true" multiValued="true"/>
<dynamicField name="*_d" type="double" indexed="true" stored="false" docValues="false"/>
<dynamicField name="*_d_dv" type="double" indexed="true" stored="false" docValues="true"/>
+ <dynamicField name="*_ds" type="double" indexed="true" stored="false" docValues="false" multiValued="true"/>
<dynamicField name="*_ds_dv" type="double" indexed="true" stored="false" docValues="true" multiValued="true"/>
<dynamicField name="*_dt" type="date" indexed="true" stored="false" docValues="false"/>
<dynamicField name="*_dt_dv" type="date" indexed="true" stored="false" docValues="true"/>
@@ -58,6 +61,12 @@
<copyField source="*_f" dest="*_f_dv" />
<copyField source="*_is" dest="*_is_dv" />
<copyField source="*_s" dest="*_s_dv" />
+ <copyField source="*_l" dest="*_l_dv" />
+ <copyField source="*_d" dest="*_d_dv" />
<copyField source="*_ss" dest="*_ss_dv" />
+ <copyField source="*_is" dest="*_is_dv" />
+ <copyField source="*_fs" dest="*_fs_dv" />
+ <copyField source="*_ls" dest="*_ls_dv" />
+ <copyField source="*_ds" dest="*_ds_dv" />
<copyField source="id" dest="id_dv" />
</schema>
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java Sat Apr 25 05:12:53 2015
@@ -210,16 +210,41 @@ public class TestIntervalFaceting extend
"//lst[@name='facet_intervals']/lst[@name='test_l_dv']/int[@name='[5,9]'][.=5]");
}
+
+ @Test
+ public void testWithFieldCache() {
+ assertU(adoc("id", "1", "test_s", "dog", "test_l", "1"));
+ assertU(adoc("id", "2", "test_s", "cat", "test_l", "2"));
+ assertU(adoc("id", "3", "test_s", "bird", "test_l", "3"));
+ assertU(adoc("id", "4", "test_s", "turtle", "test_l", "4"));
+ assertU(adoc("id", "5", "test_s", "\\goodbye,", "test_l", "5"));
+ assertU(adoc("id", "6", "test_s", ",hello\\", "test_l", "6"));
+ assertU(adoc("id", "7", "test_s", "dog", "test_l", "7"));
+ assertU(adoc("id", "8", "test_s", "dog", "test_l", "8"));
+ assertU(adoc("id", "9", "test_s", "cat", "test_l", "9"));
+ assertU(adoc("id", "10"));
+ assertU(commit());
+
+ assertQ(req("q", "*:*", "facet", "true", "facet.interval", "test_s",
+ "facet.interval", "test_l", "f.test_s.facet.interval.set", "[cat,dog]",
+ "f.test_l.facet.interval.set", "[3,6]",
+ "f.test_l.facet.interval.set", "[5,9]"),
+ "//lst[@name='facet_intervals']/lst[@name='test_s']/int[@name='[cat,dog]'][.=5]",
+ "//lst[@name='facet_intervals']/lst[@name='test_l']/int[@name='[3,6]'][.=4]",
+ "//lst[@name='facet_intervals']/lst[@name='test_l']/int[@name='[5,9]'][.=5]");
+
+ }
@Test
@Slow
public void testRandom() throws Exception {
// All field values will be a number between 0 and cardinality
- int cardinality = 1000000;
+ int cardinality = 100000;
// Fields to use for interval faceting
String[] fields = new String[]{"test_s_dv", "test_i_dv", "test_l_dv", "test_f_dv", "test_d_dv",
- "test_ss_dv", "test_is_dv", "test_fs_dv", "test_ls_dv", "test_ds_dv"};
- for (int i = 0; i < atLeast(5000); i++) {
+ "test_ss_dv", "test_is_dv", "test_fs_dv", "test_ls_dv", "test_ds_dv", "test_s", "test_i",
+ "test_l", "test_f", "test_d", "test_ss", "test_is", "test_fs", "test_ls", "test_ds"};
+ for (int i = 0; i < atLeast(500); i++) {
if (random().nextInt(50) == 0) {
//have some empty docs
assertU(adoc("id", String.valueOf(i)));
@@ -233,26 +258,26 @@ public class TestIntervalFaceting extend
String[] docFields = new String[(random().nextInt(5)) * 10 + 12];
docFields[0] = "id";
docFields[1] = String.valueOf(i);
- docFields[2] = "test_s_dv";
+ docFields[2] = "test_s";
docFields[3] = String.valueOf(random().nextInt(cardinality));
- docFields[4] = "test_i_dv";
+ docFields[4] = "test_i";
docFields[5] = String.valueOf(random().nextInt(cardinality));
- docFields[6] = "test_l_dv";
+ docFields[6] = "test_l";
docFields[7] = String.valueOf(random().nextInt(cardinality));
- docFields[8] = "test_f_dv";
+ docFields[8] = "test_f";
docFields[9] = String.valueOf(random().nextFloat() * cardinality);
- docFields[10] = "test_d_dv";
+ docFields[10] = "test_d";
docFields[11] = String.valueOf(random().nextDouble() * cardinality);
for (int j = 12; j < docFields.length; ) {
- docFields[j++] = "test_ss_dv";
+ docFields[j++] = "test_ss";
docFields[j++] = String.valueOf(random().nextInt(cardinality));
- docFields[j++] = "test_is_dv";
+ docFields[j++] = "test_is";
docFields[j++] = String.valueOf(random().nextInt(cardinality));
- docFields[j++] = "test_ls_dv";
+ docFields[j++] = "test_ls";
docFields[j++] = String.valueOf(random().nextInt(cardinality));
- docFields[j++] = "test_fs_dv";
+ docFields[j++] = "test_fs";
docFields[j++] = String.valueOf(random().nextFloat() * cardinality);
- docFields[j++] = "test_ds_dv";
+ docFields[j++] = "test_ds";
docFields[j++] = String.valueOf(random().nextDouble() * cardinality);
}
assertU(adoc(docFields));
@@ -262,7 +287,7 @@ public class TestIntervalFaceting extend
}
assertU(commit());
- for (int i = 0; i < atLeast(1000); i++) {
+ for (int i = 0; i < atLeast(100); i++) {
doTestQuery(cardinality, fields);
}
@@ -321,7 +346,7 @@ public class TestIntervalFaceting extend
Integer[] values = new Integer[2];
values[0] = random().nextInt(max);
values[1] = random().nextInt(max);
- if ("test_s_dv".equals(fieldName) || "test_ss_dv".equals(fieldName)) {
+ if (fieldName.startsWith("test_s")) {
Arrays.sort(values, new Comparator<Integer>() {
@Override
@@ -796,26 +821,6 @@ public class TestIntervalFaceting extend
}
@Test
- public void testNonDocValueFields() {
- // there is a copyField that will copy to the dv version of the field
- assertU(adoc("id", "1", "test_s", "dog"));
- assertU(adoc("id", "2", "test_s", "cat"));
- assertU(adoc("id", "3", "test_s", "bird"));
- assertU(adoc("id", "4", "test_s", "cat"));
- assertU(commit());
-
- assertQ(req("q", "*:*", "facet", "true", "facet.interval", "test_s_dv",
- "facet.interval", "test_s_dv", "f.test_s_dv.facet.interval.set", "[cat,dog]"),
- "//lst[@name='facet_intervals']/lst[@name='test_s_dv']/int[@name='[cat,dog]'][.=3]");
-
- assertQEx("Interval Faceting only on fields with doc values",
- req("q", "*:*", "facet", "true", "facet.interval", "test_s",
- "f.test_s.facet.interval.set", "[cat,dog]"),
- SolrException.ErrorCode.BAD_REQUEST
- );
- }
-
- @Test
public void testWithDeletedDocs() {
assertU(adoc("id", "1", "test_s_dv", "dog"));
assertU(adoc("id", "2", "test_s_dv", "cat"));