You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2014/09/10 23:01:38 UTC
svn commit: r1624131 - in /lucene/dev/branches/lucene_solr_4_10: ./
dev-tools/ lucene/ lucene/analysis/
lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/
lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/...
Author: hossman
Date: Wed Sep 10 21:01:36 2014
New Revision: 1624131
URL: http://svn.apache.org/r1624131
Log:
SOLR-6493: Fix fq exclusion via ex local param in multivalued stats.field (merge r1623893)
Modified:
lucene/dev/branches/lucene_solr_4_10/ (props changed)
lucene/dev/branches/lucene_solr_4_10/dev-tools/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/BUILD.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/JRE_VERSION_MIGRATION.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/LICENSE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/MIGRATE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/NOTICE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/README.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/SYSTEM_REQUIREMENTS.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/Lucene47WordDelimiterFilter.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/ASCIITLD.jflex-macro (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/SUPPLEMENTARY.jflex-macro (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/StandardTokenizerImpl40.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/StandardTokenizerImpl40.jflex (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/UAX29URLEmailTokenizerImpl40.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/UAX29URLEmailTokenizerImpl40.jflex (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/package.html (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLucene47WordDelimiterFilter.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/backwards/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/benchmark/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/build.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/classification/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/classification/build.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/classification/ivy.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/classification/src/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/codecs/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/common-build.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions2.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/search/TestSort.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/search/TestTotalHitCountCollector.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/demo/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/expressions/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/facet/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/grouping/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/highlighter/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/ivy-ignore-conflicts.properties (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/ivy-settings.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/ivy-versions.properties (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/join/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/licenses/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/memory/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/misc/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/module-build.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/queries/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/queryparser/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/replicator/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/sandbox/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/site/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/spatial/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/spatial/src/java/org/apache/lucene/spatial/bbox/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/spatial/src/java/org/apache/lucene/spatial/util/ShapeAreaValueSource.java (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/spatial/src/test-files/data/simple-bbox.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/spatial/src/test-files/simple-Queries-BBox.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/spatial/src/test/org/apache/lucene/spatial/bbox/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/suggest/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/test-framework/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/ (props changed)
lucene/dev/branches/lucene_solr_4_10/lucene/tools/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/lucene_solr_4_10/solr/LICENSE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/NOTICE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/README.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/SYSTEM_REQUIREMENTS.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/bin/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/build.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/cloud-dev/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/common-build.xml (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/contrib/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/core/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/request/DocValuesStats.java (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/spelling/suggest/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/core/TestConfig.java (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/spelling/suggest/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/example/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/httpclient-LICENSE-ASL.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/httpclient-NOTICE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/httpcore-LICENSE-ASL.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/httpcore-NOTICE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/httpmime-LICENSE-ASL.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/licenses/httpmime-NOTICE.txt (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/scripts/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/site/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/solrj/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/test-framework/ (props changed)
lucene/dev/branches/lucene_solr_4_10/solr/webapp/ (props changed)
Modified: lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt?rev=1624131&r1=1624130&r2=1624131&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt Wed Sep 10 21:01:36 2014
@@ -31,6 +31,8 @@ Bug Fixes
* SOLR-6024: Fix StatsComponent when using docValues="true" multiValued="true"
(Vitaliy Zhovtyuk & Tomas Fernandez-Lobbe via hossman)
+* SOLR-6493: Fix fq exclusion via "ex" local param in multivalued stats.field (hossman)
+
Other Changes
---------------------
Modified: lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java?rev=1624131&r1=1624130&r2=1624131&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java Wed Sep 10 21:01:36 2014
@@ -316,11 +316,11 @@ class SimpleStats {
if (sf.multiValued() || ft.multiValuedFieldCache()) {
if(sf.hasDocValues()) {
- stv = DocValuesStats.getCounts(searcher, sf.getName(), docs, calcDistinct, facets).getStatsValues();
+ stv = DocValuesStats.getCounts(searcher, sf.getName(), base, calcDistinct, facets).getStatsValues();
} else {
//use UnInvertedField for multivalued fields
UnInvertedField uif = UnInvertedField.getUnInvertedField(statsField, searcher);
- stv = uif.getStats(searcher, docs, calcDistinct, facets).getStatsValues();
+ stv = uif.getStats(searcher, base, calcDistinct, facets).getStatsValues();
}
} else {
stv = getFieldCacheStats(statsField, calcDistinct, facets);
Modified: lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java?rev=1624131&r1=1624130&r2=1624131&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java Wed Sep 10 21:01:36 2014
@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.TimeZone;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.StatsParams;
@@ -66,10 +67,23 @@ public class StatsComponentTest extends
// , TODO: enable this test after SOLR-6452 is fixed
// "stats_ti_ni_dv","stats_tl_ni_dv","stats_tf_ni_dv","stats_td_ni_dv"
}) {
- doTestFieldStatisticsResult(f);
- doTestFieldStatisticsMissingResult(f);
- doTestFacetStatisticsResult(f);
- doTestFacetStatisticsMissingResult(f);
+
+ // all of our checks should work with all of these params
+ // ie: with or w/o these excluded filters, results should be the same.
+ SolrParams[] baseParamsSet = new SolrParams[] {
+ params("stats.field", f, "stats", "true"),
+ params("stats.field", "{!ex=fq1,fq2}"+f, "stats", "true",
+ "fq", "{!tag=fq1}-id:[0 TO 2]",
+ "fq", "{!tag=fq2}-id:[2 TO 1000]"),
+ params("stats.field", "{!ex=fq1}"+f, "stats", "true",
+ "fq", "{!tag=fq1}id:1")
+ };
+
+ doTestFieldStatisticsResult(f, baseParamsSet);
+ doTestFieldStatisticsMissingResult(f, baseParamsSet);
+ doTestFacetStatisticsResult(f, baseParamsSet);
+ doTestFacetStatisticsMissingResult(f, baseParamsSet);
+
clearIndex();
assertU(commit());
}
@@ -81,14 +95,14 @@ public class StatsComponentTest extends
// , TODO: enable this test after SOLR-6452 is fixed
//"stats_tis_ni_dv","stats_tfs_ni_dv","stats_tls_ni_dv","stats_tds_ni_dv" // Doc Values Not indexed
}) {
+
doTestMVFieldStatisticsResult(f);
clearIndex();
assertU(commit());
}
-
}
- public void doTestFieldStatisticsResult(String f) throws Exception {
+ public void doTestFieldStatisticsResult(String f, SolrParams[] baseParamsSet) throws Exception {
assertU(adoc("id", "1", f, "-10"));
assertU(adoc("id", "2", f, "-20"));
assertU(commit());
@@ -96,18 +110,39 @@ public class StatsComponentTest extends
assertU(adoc("id", "4", f, "-40"));
assertU(commit());
- assertQ("test statistics values", req("q", "*:*", "stats", "true", "stats.field", f, "stats.calcdistinct", "true")
- , "//double[@name='min'][.='-40.0']"
- , "//double[@name='max'][.='-10.0']"
- , "//double[@name='sum'][.='-100.0']"
- , "//long[@name='count'][.='4']"
- , "//long[@name='missing'][.='0']"
- , "//long[@name='countDistinct'][.='4']"
- , "count(//arr[@name='distinctValues']/*)=4"
- , "//double[@name='sumOfSquares'][.='3000.0']"
- , "//double[@name='mean'][.='-25.0']"
- , "//double[@name='stddev'][.='12.909944487358056']"
- );
+ // status should be the same regardless of baseParams
+ for (SolrParams baseParams : baseParamsSet) {
+
+ assertQ("test statistics values",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true")
+ , "//double[@name='min'][.='-40.0']"
+ , "//double[@name='max'][.='-10.0']"
+ , "//double[@name='sum'][.='-100.0']"
+ , "//long[@name='count'][.='4']"
+ , "//long[@name='missing'][.='0']"
+ , "//long[@name='countDistinct'][.='4']"
+ , "count(//arr[@name='distinctValues']/*)=4"
+ , "//double[@name='sumOfSquares'][.='3000.0']"
+ , "//double[@name='mean'][.='-25.0']"
+ , "//double[@name='stddev'][.='12.909944487358056']"
+ );
+
+ assertQ("test statistics w/fq",
+ req(baseParams,
+ "q", "*:*", "fq", "-id:4",
+ "stats.calcdistinct", "true")
+ , "//double[@name='min'][.='-30.0']"
+ , "//double[@name='max'][.='-10.0']"
+ , "//double[@name='sum'][.='-60.0']"
+ , "//long[@name='count'][.='3']"
+ , "//long[@name='missing'][.='0']"
+ , "//long[@name='countDistinct'][.='3']"
+ , "count(//arr[@name='distinctValues']/*)=3"
+ , "//double[@name='sumOfSquares'][.='1400.0']"
+ , "//double[@name='mean'][.='-20.0']"
+ , "//double[@name='stddev'][.='10.0']"
+ );
+ }
}
@@ -120,59 +155,89 @@ public class StatsComponentTest extends
assertU(adoc("id", "5", "active_s", "false"));
assertU(commit());
- assertQ("test statistics values", req("q", "*:*", "stats", "true", "stats.field", f, "stats.calcdistinct", "true")
- , "//double[@name='min'][.='-100.0']"
- , "//double[@name='max'][.='200.0']"
- , "//double[@name='sum'][.='9.0']"
- , "//long[@name='count'][.='8']"
- , "//long[@name='missing'][.='1']"
- , "//long[@name='countDistinct'][.='8']"
- , "count(//arr[@name='distinctValues']/*)=8"
- , "//double[@name='sumOfSquares'][.='53101.0']"
- , "//double[@name='mean'][.='1.125']"
- , "//double[@name='stddev'][.='87.08852228787508']"
- );
-
- assertQ("test statistics values", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.calcdistinct", "true")
- , "//double[@name='min'][.='-100.0']"
- , "//double[@name='max'][.='200.0']"
- , "//double[@name='sum'][.='9.0']"
- , "//long[@name='count'][.='8']"
- , "//long[@name='missing'][.='1']"
- , "//long[@name='countDistinct'][.='8']"
- , "count(//lst[@name='" + f + "']/arr[@name='distinctValues']/*)=8"
- , "//double[@name='sumOfSquares'][.='53101.0']"
- , "//double[@name='mean'][.='1.125']"
- , "//double[@name='stddev'][.='87.08852228787508']"
- );
-
- assertQ("test value for active_s=true", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.calcdistinct", "true")
- , "//lst[@name='true']/double[@name='min'][.='-100.0']"
- , "//lst[@name='true']/double[@name='max'][.='200.0']"
- , "//lst[@name='true']/double[@name='sum'][.='70.0']"
- , "//lst[@name='true']/long[@name='count'][.='4']"
- , "//lst[@name='true']/long[@name='missing'][.='0']"
- , "//lst[@name='true']//long[@name='countDistinct'][.='4']"
- , "count(//lst[@name='true']/arr[@name='distinctValues']/*)=4"
- , "//lst[@name='true']/double[@name='sumOfSquares'][.='50500.0']"
- , "//lst[@name='true']/double[@name='mean'][.='17.5']"
- , "//lst[@name='true']/double[@name='stddev'][.='128.16005617976296']"
- );
-
- assertQ("test value for active_s=false", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.calcdistinct", "true", "indent", "true")
- , "//lst[@name='false']/double[@name='min'][.='-40.0']"
- , "//lst[@name='false']/double[@name='max'][.='10.0']"
- , "//lst[@name='false']/double[@name='sum'][.='-61.0']"
- , "//lst[@name='false']/long[@name='count'][.='4']"
- , "//lst[@name='false']/long[@name='missing'][.='1']"
- , "//lst[@name='true']//long[@name='countDistinct'][.='4']"
- , "count(//lst[@name='true']/arr[@name='distinctValues']/*)=4"
- , "//lst[@name='false']/double[@name='sumOfSquares'][.='2601.0']"
- , "//lst[@name='false']/double[@name='mean'][.='-15.25']"
- , "//lst[@name='false']/double[@name='stddev'][.='23.59908190304586']"
- );
-
-
+ // with or w/o these excluded filters, results should be the same
+ for (SolrParams baseParams : new SolrParams[] {
+ params("stats.field", f, "stats", "true"),
+ params("stats.field", "{!ex=fq1}"+f, "stats", "true",
+ "fq", "{!tag=fq1}id:1"),
+ params("stats.field", "{!ex=fq1,fq2}"+f, "stats", "true",
+ "fq", "{!tag=fq1}-id:[0 TO 2]",
+ "fq", "{!tag=fq2}-id:[2 TO 1000]") }) {
+
+
+ assertQ("test statistics values",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true")
+ , "//double[@name='min'][.='-100.0']"
+ , "//double[@name='max'][.='200.0']"
+ , "//double[@name='sum'][.='9.0']"
+ , "//long[@name='count'][.='8']"
+ , "//long[@name='missing'][.='1']"
+ , "//long[@name='countDistinct'][.='8']"
+ , "count(//arr[@name='distinctValues']/*)=8"
+ , "//double[@name='sumOfSquares'][.='53101.0']"
+ , "//double[@name='mean'][.='1.125']"
+ , "//double[@name='stddev'][.='87.08852228787508']"
+ );
+
+ assertQ("test statistics values w/fq",
+ req(baseParams, "fq", "-id:1",
+ "q", "*:*", "stats.calcdistinct", "true")
+ , "//double[@name='min'][.='-40.0']"
+ , "//double[@name='max'][.='200.0']"
+ , "//double[@name='sum'][.='119.0']"
+ , "//long[@name='count'][.='6']"
+ , "//long[@name='missing'][.='1']"
+ , "//long[@name='countDistinct'][.='6']"
+ , "count(//arr[@name='distinctValues']/*)=6"
+ , "//double[@name='sumOfSquares'][.='43001.0']"
+ , "//double[@name='mean'][.='19.833333333333332']"
+ , "//double[@name='stddev'][.='90.15634568163611']"
+ );
+
+ // TODO: why are there 3 identical requests below?
+
+ assertQ("test statistics values",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true", "stats.facet", "active_s")
+ , "//double[@name='min'][.='-100.0']"
+ , "//double[@name='max'][.='200.0']"
+ , "//double[@name='sum'][.='9.0']"
+ , "//long[@name='count'][.='8']"
+ , "//long[@name='missing'][.='1']"
+ , "//long[@name='countDistinct'][.='8']"
+ , "count(//lst[@name='" + f + "']/arr[@name='distinctValues']/*)=8"
+ , "//double[@name='sumOfSquares'][.='53101.0']"
+ , "//double[@name='mean'][.='1.125']"
+ , "//double[@name='stddev'][.='87.08852228787508']"
+ );
+
+ assertQ("test value for active_s=true",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true", "stats.facet", "active_s")
+ , "//lst[@name='true']/double[@name='min'][.='-100.0']"
+ , "//lst[@name='true']/double[@name='max'][.='200.0']"
+ , "//lst[@name='true']/double[@name='sum'][.='70.0']"
+ , "//lst[@name='true']/long[@name='count'][.='4']"
+ , "//lst[@name='true']/long[@name='missing'][.='0']"
+ , "//lst[@name='true']//long[@name='countDistinct'][.='4']"
+ , "count(//lst[@name='true']/arr[@name='distinctValues']/*)=4"
+ , "//lst[@name='true']/double[@name='sumOfSquares'][.='50500.0']"
+ , "//lst[@name='true']/double[@name='mean'][.='17.5']"
+ , "//lst[@name='true']/double[@name='stddev'][.='128.16005617976296']"
+ );
+
+ assertQ("test value for active_s=false",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true", "stats.facet", "active_s")
+ , "//lst[@name='false']/double[@name='min'][.='-40.0']"
+ , "//lst[@name='false']/double[@name='max'][.='10.0']"
+ , "//lst[@name='false']/double[@name='sum'][.='-61.0']"
+ , "//lst[@name='false']/long[@name='count'][.='4']"
+ , "//lst[@name='false']/long[@name='missing'][.='1']"
+ , "//lst[@name='true']//long[@name='countDistinct'][.='4']"
+ , "count(//lst[@name='true']/arr[@name='distinctValues']/*)=4"
+ , "//lst[@name='false']/double[@name='sumOfSquares'][.='2601.0']"
+ , "//lst[@name='false']/double[@name='mean'][.='-15.25']"
+ , "//lst[@name='false']/double[@name='stddev'][.='23.59908190304586']"
+ );
+ }
}
public void testFieldStatisticsResultsStringField() throws Exception {
@@ -235,7 +300,7 @@ public class StatsComponentTest extends
}
- public void doTestFieldStatisticsMissingResult(String f) throws Exception {
+ public void doTestFieldStatisticsMissingResult(String f, SolrParams[] baseParamsSet) throws Exception {
assertU(adoc("id", "1", f, "-10"));
assertU(adoc("id", "2", f, "-20"));
assertU(commit());
@@ -243,21 +308,27 @@ public class StatsComponentTest extends
assertU(adoc("id", "4", f, "-40"));
assertU(commit());
- assertQ("test statistics values", req("q", "*:*", "stats", "true", "stats.field", f, "stats.calcdistinct", "true")
- , "//double[@name='min'][.='-40.0']"
- , "//double[@name='max'][.='-10.0']"
- , "//double[@name='sum'][.='-70.0']"
- , "//long[@name='count'][.='3']"
- , "//long[@name='missing'][.='1']"
- , "//long[@name='countDistinct'][.='3']"
- , "count(//arr[@name='distinctValues']/*)=3"
- , "//double[@name='sumOfSquares'][.='2100.0']"
- , "//double[@name='mean'][.='-23.333333333333332']"
- , "//double[@name='stddev'][.='15.275252316519467']"
- );
+ // status should be the same regardless of baseParams
+ for (SolrParams baseParams : baseParamsSet) {
+
+ SolrQueryRequest request = req(baseParams, "q", "*:*", "stats.calcdistinct", "true");
+
+ assertQ("test statistics values", request
+ , "//double[@name='min'][.='-40.0']"
+ , "//double[@name='max'][.='-10.0']"
+ , "//double[@name='sum'][.='-70.0']"
+ , "//long[@name='count'][.='3']"
+ , "//long[@name='missing'][.='1']"
+ , "//long[@name='countDistinct'][.='3']"
+ , "count(//arr[@name='distinctValues']/*)=3"
+ , "//double[@name='sumOfSquares'][.='2100.0']"
+ , "//double[@name='mean'][.='-23.333333333333332']"
+ , "//double[@name='stddev'][.='15.275252316519467']"
+ );
+ }
}
- public void doTestFacetStatisticsResult(String f) throws Exception {
+ public void doTestFacetStatisticsResult(String f, SolrParams[] baseParamsSet) throws Exception {
assertU(adoc("id", "1", f, "10", "active_s", "true", "other_s", "foo"));
assertU(adoc("id", "2", f, "20", "active_s", "true", "other_s", "bar"));
assertU(commit());
@@ -267,43 +338,55 @@ public class StatsComponentTest extends
final String pre = "//lst[@name='stats_fields']/lst[@name='"+f+"']/lst[@name='facets']/lst[@name='active_s']";
- assertQ("test value for active_s=true", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.facet", "other_s", "stats.calcdistinct", "true", "indent", "true")
- , "*[count("+pre+")=1]"
- , pre+"/lst[@name='true']/double[@name='min'][.='10.0']"
- , pre+"/lst[@name='true']/double[@name='max'][.='20.0']"
- , pre+"/lst[@name='true']/double[@name='sum'][.='30.0']"
- , pre+"/lst[@name='true']/long[@name='count'][.='2']"
- , pre+"/lst[@name='true']/long[@name='missing'][.='0']"
- , pre + "/lst[@name='true']/long[@name='countDistinct'][.='2']"
- , "count(" + pre + "/lst[@name='true']/arr[@name='distinctValues']/*)=2"
- , pre+"/lst[@name='true']/double[@name='sumOfSquares'][.='500.0']"
- , pre+"/lst[@name='true']/double[@name='mean'][.='15.0']"
- , pre+"/lst[@name='true']/double[@name='stddev'][.='7.0710678118654755']"
- );
-
- assertQ("test value for active_s=false", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.calcdistinct", "true")
- , pre+"/lst[@name='false']/double[@name='min'][.='30.0']"
- , pre+"/lst[@name='false']/double[@name='max'][.='40.0']"
- , pre+"/lst[@name='false']/double[@name='sum'][.='70.0']"
- , pre+"/lst[@name='false']/long[@name='count'][.='2']"
- , pre+"/lst[@name='false']/long[@name='missing'][.='0']"
- , pre + "/lst[@name='true']/long[@name='countDistinct'][.='2']"
- , "count(" + pre + "/lst[@name='true']/arr[@name='distinctValues']/*)=2"
- , pre+"/lst[@name='false']/double[@name='sumOfSquares'][.='2500.0']"
- , pre+"/lst[@name='false']/double[@name='mean'][.='35.0']"
- , pre+"/lst[@name='false']/double[@name='stddev'][.='7.0710678118654755']"
- );
+ // status should be the same regardless of baseParams
+ for (SolrParams baseParams : baseParamsSet) {
+
+ assertQ("test value for active_s=true",
+ req(baseParams,
+ "q", "*:*", "stats.calcdistinct", "true",
+ "stats.facet", "active_s", "stats.facet", "other_s")
+ , "*[count("+pre+")=1]"
+ , pre+"/lst[@name='true']/double[@name='min'][.='10.0']"
+ , pre+"/lst[@name='true']/double[@name='max'][.='20.0']"
+ , pre+"/lst[@name='true']/double[@name='sum'][.='30.0']"
+ , pre+"/lst[@name='true']/long[@name='count'][.='2']"
+ , pre+"/lst[@name='true']/long[@name='missing'][.='0']"
+ , pre + "/lst[@name='true']/long[@name='countDistinct'][.='2']"
+ , "count(" + pre + "/lst[@name='true']/arr[@name='distinctValues']/*)=2"
+ , pre+"/lst[@name='true']/double[@name='sumOfSquares'][.='500.0']"
+ , pre+"/lst[@name='true']/double[@name='mean'][.='15.0']"
+ , pre+"/lst[@name='true']/double[@name='stddev'][.='7.0710678118654755']"
+ );
+
+ assertQ("test value for active_s=false",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true", "stats.facet", "active_s")
+ , pre+"/lst[@name='false']/double[@name='min'][.='30.0']"
+ , pre+"/lst[@name='false']/double[@name='max'][.='40.0']"
+ , pre+"/lst[@name='false']/double[@name='sum'][.='70.0']"
+ , pre+"/lst[@name='false']/long[@name='count'][.='2']"
+ , pre+"/lst[@name='false']/long[@name='missing'][.='0']"
+ , pre + "/lst[@name='true']/long[@name='countDistinct'][.='2']"
+ , "count(" + pre + "/lst[@name='true']/arr[@name='distinctValues']/*)=2"
+ , pre+"/lst[@name='false']/double[@name='sumOfSquares'][.='2500.0']"
+ , pre+"/lst[@name='false']/double[@name='mean'][.='35.0']"
+ , pre+"/lst[@name='false']/double[@name='stddev'][.='7.0710678118654755']"
+ );
+ }
}
- public void doTestFacetStatisticsMissingResult(String f) throws Exception {
- assertU(adoc("id", "1", f, "10", "active_s", "true"));
- assertU(adoc("id", "2", f, "20", "active_s", "true"));
- assertU(commit());
- assertU(adoc("id", "3", "active_s", "false"));
- assertU(adoc("id", "4", f, "40", "active_s", "false"));
- assertU(commit());
-
- assertQ("test value for active_s=true", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.calcdistinct", "true")
+ public void doTestFacetStatisticsMissingResult(String f, SolrParams[] baseParamsSet) throws Exception {
+ assertU(adoc("id", "1", f, "10", "active_s", "true"));
+ assertU(adoc("id", "2", f, "20", "active_s", "true"));
+ assertU(commit());
+ assertU(adoc("id", "3", "active_s", "false"));
+ assertU(adoc("id", "4", f, "40", "active_s", "false"));
+ assertU(commit());
+
+ // status should be the same regardless of baseParams
+ for (SolrParams baseParams : baseParamsSet) {
+
+ assertQ("test value for active_s=true",
+ req(baseParams, "q", "*:*", "stats.calcdistinct", "true", "stats.facet", "active_s")
, "//lst[@name='true']/double[@name='min'][.='10.0']"
, "//lst[@name='true']/double[@name='max'][.='20.0']"
, "//lst[@name='true']/double[@name='sum'][.='30.0']"
@@ -314,9 +397,10 @@ public class StatsComponentTest extends
, "//lst[@name='true']/double[@name='sumOfSquares'][.='500.0']"
, "//lst[@name='true']/double[@name='mean'][.='15.0']"
, "//lst[@name='true']/double[@name='stddev'][.='7.0710678118654755']"
- );
-
- assertQ("test value for active_s=false", req("q", "*:*", "stats", "true", "stats.field", f, "stats.facet", "active_s", "stats.calcdistinct", "true")
+ );
+
+ assertQ("test value for active_s=false",
+ req(baseParams, "q", "*:*", "stats.facet", "active_s", "stats.calcdistinct", "true")
, "//lst[@name='false']/double[@name='min'][.='40.0']"
, "//lst[@name='false']/double[@name='max'][.='40.0']"
, "//lst[@name='false']/double[@name='sum'][.='40.0']"
@@ -327,8 +411,9 @@ public class StatsComponentTest extends
, "//lst[@name='false']/double[@name='sumOfSquares'][.='1600.0']"
, "//lst[@name='false']/double[@name='mean'][.='40.0']"
, "//lst[@name='false']/double[@name='stddev'][.='0.0']"
- );
+ );
}
+ }
public void testFieldStatisticsResultsNumericFieldAlwaysMissing() throws Exception {
SolrCore core = h.getCore();