You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2008/07/24 21:02:17 UTC
svn commit: r679490 - in /lucene/solr/trunk: CHANGES.txt
src/test/org/apache/solr/BasicFunctionalityTest.java
src/test/org/apache/solr/request/SimpleFacetsTest.java
Author: hossman
Date: Thu Jul 24 12:02:17 2008
New Revision: 679490
URL: http://svn.apache.org/viewvc?rev=679490&view=rev
Log:
SOLR-645: Refactory faceting tests into SimpleFacetsTest
Added:
lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java (with props)
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java
Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=679490&r1=679489&r2=679490&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Thu Jul 24 12:02:17 2008
@@ -542,6 +542,8 @@
16. SOLR-520: Deprecated unused LengthFilter since already core in
Lucene-Java (hossman)
+17. SOLR-645: Refactored SimpleFacetsTest (Lars Kotthoff via hossman)
+
Build
1. SOLR-411. Changed the names of the Solr JARs to use the defacto standard JAR names based on
project-name-version.jar. This yields, for example:
Modified: lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=679490&r1=679489&r2=679490&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java Thu Jul 24 12:02:17 2008
@@ -463,717 +463,6 @@
);
}
-
- public void testSimpleFacetCounts() {
- assertU(adoc("id", "42", "trait_s", "Tool", "trait_s", "Obnoxious",
- "name", "Zapp Brannigan"));
- assertU(adoc("id", "43" ,
- "title", "Democratic Order of Planets"));
- assertU(adoc("id", "44", "trait_s", "Tool",
- "name", "The Zapper"));
- assertU(adoc("id", "45", "trait_s", "Chauvinist",
- "title", "25 star General"));
- assertU(adoc("id", "46", "trait_s", "Obnoxious",
- "subject", "Defeated the pacifists of the Gandhi nebula"));
- assertU(adoc("id", "47", "trait_s", "Pig",
- "text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
- assertU(commit());
-
- assertQ("standard request handler returns all matches",
- req("id:[42 TO 47]"),
- "*[count(//doc)=6]"
- );
-
- assertQ("filter results using fq",
- req("q","id:[42 TO 46]",
- "fq", "id:[43 TO 47]"),
- "*[count(//doc)=4]"
- );
-
- assertQ("don't filter results using blank fq",
- req("q","id:[42 TO 46]",
- "fq", " "),
- "*[count(//doc)=5]"
- );
-
- assertQ("filter results using multiple fq params",
- req("q","id:[42 TO 46]",
- "fq", "trait_s:Obnoxious",
- "fq", "id:[43 TO 47]"),
- "*[count(//doc)=1]"
- );
-
- assertQ("check counts for facet queries",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"facet.query", "trait_s:Obnoxious"
- ,"facet.query", "id:[42 TO 45]"
- ,"facet.query", "id:[43 TO 47]"
- ,"facet.field", "trait_s"
- )
- ,"*[count(//doc)=6]"
-
- ,"//lst[@name='facet_counts']/lst[@name='facet_queries']"
- ,"//lst[@name='facet_queries']/int[@name='trait_s:Obnoxious'][.='2']"
- ,"//lst[@name='facet_queries']/int[@name='id:[42 TO 45]'][.='4']"
- ,"//lst[@name='facet_queries']/int[@name='id:[43 TO 47]'][.='5']"
-
- ,"//lst[@name='facet_counts']/lst[@name='facet_fields']"
- ,"//lst[@name='facet_fields']/lst[@name='trait_s']"
- ,"*[count(//lst[@name='trait_s']/int)=4]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Pig'][.='1']"
- );
-
- assertQ("check counts for applied facet queries using filtering (fq)",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"fq", "id:[42 TO 45]"
- ,"facet.field", "trait_s"
- ,"facet.query", "id:[42 TO 45]"
- ,"facet.query", "id:[43 TO 47]"
- )
- ,"*[count(//doc)=4]"
- ,"//lst[@name='facet_counts']/lst[@name='facet_queries']"
- ,"//lst[@name='facet_queries']/int[@name='id:[42 TO 45]'][.='4']"
- ,"//lst[@name='facet_queries']/int[@name='id:[43 TO 47]'][.='3']"
- ,"*[count(//lst[@name='trait_s']/int)=4]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Pig'][.='0']"
- );
-
- assertQ("check counts with facet.zero=false&facet.missing=true using fq",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"facet.zeros", "false"
- ,"f.trait_s.facet.missing", "true"
- ,"fq", "id:[42 TO 45]"
- ,"facet.field", "trait_s"
- )
- ,"*[count(//doc)=4]"
- ,"*[count(//lst[@name='trait_s']/int)=4]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
- ,"//lst[@name='trait_s']/int[not(@name)][.='1']"
- );
-
- assertQ("check counts with facet.mincount=1&facet.missing=true using fq",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"facet.mincount", "1"
- ,"f.trait_s.facet.missing", "true"
- ,"fq", "id:[42 TO 45]"
- ,"facet.field", "trait_s"
- )
- ,"*[count(//doc)=4]"
- ,"*[count(//lst[@name='trait_s']/int)=4]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
- ,"//lst[@name='trait_s']/int[not(@name)][.='1']"
- );
-
- assertQ("check counts with facet.mincount=2&facet.missing=true using fq",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"facet.mincount", "2"
- ,"f.trait_s.facet.missing", "true"
- ,"fq", "id:[42 TO 45]"
- ,"facet.field", "trait_s"
- )
- ,"*[count(//doc)=4]"
- ,"*[count(//lst[@name='trait_s']/int)=2]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[not(@name)][.='1']"
- );
-
- assertQ("check sorted paging",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"fq", "id:[42 TO 45]"
- ,"facet.field", "trait_s"
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","4"
- )
- ,"*[count(//lst[@name='trait_s']/int)=4]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Pig'][.='0']"
- );
-
- assertQ("check sorted paging",
- req("q", "id:[42 TO 47]"
- ,"facet", "true"
- ,"fq", "id:[42 TO 45]"
- ,"facet.field", "trait_s"
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","3"
- )
- ,"*[count(//lst[@name='trait_s']/int)=3]"
- ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
- ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
- ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
- );
-
- }
-
- public void testDateFacets() {
- final String f = "bday";
- final String pre = "//lst[@name='facet_dates']/lst[@name='"+f+"']";
-
- assertU(adoc("id", "1", f, "1976-07-04T12:08:56.235Z"));
- assertU(adoc("id", "2", f, "1976-07-05T00:00:00.000Z"));
- assertU(adoc("id", "3", f, "1976-07-15T00:07:67.890Z"));
- assertU(adoc("id", "4", f, "1976-07-21T00:07:67.890Z"));
- assertU(adoc("id", "5", f, "1976-07-13T12:12:25.255Z"));
- assertU(adoc("id", "6", f, "1976-07-03T17:01:23.456Z"));
- assertU(adoc("id", "7", f, "1976-07-12T12:12:25.255Z"));
- assertU(adoc("id", "8", f, "1976-07-15T15:15:15.155Z"));
- assertU(adoc("id", "9", f, "1907-07-12T13:13:23.235Z"));
- assertU(adoc("id", "10", f, "1976-07-03T11:02:45.678Z"));
- assertU(adoc("id", "11", f, "1907-07-12T12:12:25.255Z"));
- assertU(adoc("id", "12", f, "2007-07-30T07:07:07.070Z"));
- assertU(adoc("id", "13", f, "1976-07-30T22:22:22.222Z"));
- assertU(adoc("id", "14", f, "1976-07-05T22:22:22.222Z"));
- assertU(commit());
-
- assertQ("check counts for month of facet by day",
- req( "q", "*:*"
- ,"rows", "0"
- ,"facet", "true"
- ,"facet.date", f
- ,"facet.date.start", "1976-07-01T00:00:00.000Z"
- ,"facet.date.end", "1976-07-01T00:00:00.000Z+1MONTH"
- ,"facet.date.gap", "+1DAY"
- ,"facet.date.other", "all"
- )
- // 31 days + pre+post+inner = 34
- ,"*[count("+pre+"/int)=34]"
- ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='0' ]"
- ,pre+"/int[@name='1976-07-02T00:00:00Z'][.='0' ]"
- ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2' ]"
- // july4th = 2 because exists doc @ 00:00:00.000 on July5
- // (date faceting is inclusive)
- ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2' ]"
- ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2' ]"
- ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-07T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-08T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-09T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-10T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-11T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-12T00:00:00Z'][.='1' ]"
- ,pre+"/int[@name='1976-07-13T00:00:00Z'][.='1' ]"
- ,pre+"/int[@name='1976-07-14T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-15T00:00:00Z'][.='2' ]"
- ,pre+"/int[@name='1976-07-16T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-17T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-18T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-19T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-21T00:00:00Z'][.='1' ]"
- ,pre+"/int[@name='1976-07-22T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-23T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-24T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-25T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-26T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-27T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-28T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-29T00:00:00Z'][.='0']"
- ,pre+"/int[@name='1976-07-30T00:00:00Z'][.='1' ]"
- ,pre+"/int[@name='1976-07-31T00:00:00Z'][.='0']"
-
- ,pre+"/int[@name='before' ][.='2']"
- ,pre+"/int[@name='after' ][.='1']"
- ,pre+"/int[@name='between'][.='11']"
-
- );
-
- assertQ("check hardend=false",
- req( "q", "*:*"
- ,"rows", "0"
- ,"facet", "true"
- ,"facet.date", f
- ,"facet.date.start", "1976-07-01T00:00:00.000Z"
- ,"facet.date.end", "1976-07-13T00:00:00.000Z"
- ,"facet.date.gap", "+5DAYS"
- ,"facet.date.other", "all"
- ,"facet.date.hardend","false"
- )
- // 3 gaps + pre+post+inner = 6
- ,"*[count("+pre+"/int)=6]"
- ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='5' ]"
- ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0' ]"
- ,pre+"/int[@name='1976-07-11T00:00:00Z'][.='4' ]"
-
- ,pre+"/int[@name='before' ][.='2']"
- ,pre+"/int[@name='after' ][.='3']"
- ,pre+"/int[@name='between'][.='9']"
- );
-
- assertQ("check hardend=true",
- req( "q", "*:*"
- ,"rows", "0"
- ,"facet", "true"
- ,"facet.date", f
- ,"facet.date.start", "1976-07-01T00:00:00.000Z"
- ,"facet.date.end", "1976-07-13T00:00:00.000Z"
- ,"facet.date.gap", "+5DAYS"
- ,"facet.date.other", "all"
- ,"facet.date.hardend","true"
- )
- // 3 gaps + pre+post+inner = 6
- ,"*[count("+pre+"/int)=6]"
- ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='5' ]"
- ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0' ]"
- ,pre+"/int[@name='1976-07-11T00:00:00Z'][.='1' ]"
-
- ,pre+"/int[@name='before' ][.='2']"
- ,pre+"/int[@name='after' ][.='6']"
- ,pre+"/int[@name='between'][.='6']"
- );
-
- }
-
- public void testFacetMultiValued() {
- doFacets("t_s");
- doFacets("t_s", "facet.enum.cache.minDf", "2");
- doFacets("t_s", "facet.enum.cache.minDf", "100");
- }
-
- public void testFacetSingleValued() {
- doFacets("t_s1");
- }
-
- public void doFacets(String f, String... params) {
- String pre = "//lst[@name='"+f+"']";
- String notc = "id:[* TO *] -"+f+":C";
-
- assertU(adoc("id", "1", f, "A"));
- assertU(adoc("id", "2", f, "B"));
- assertU(adoc("id", "3", f, "C"));
- assertU(adoc("id", "4", f, "C"));
- assertU(adoc("id", "5", f, "D"));
- assertU(adoc("id", "6", f, "E"));
- assertU(adoc("id", "7", f, "E"));
- assertU(adoc("id", "8", f, "E"));
- assertU(adoc("id", "9", f, "F"));
- assertU(adoc("id", "10", f, "G"));
- assertU(adoc("id", "11", f, "G"));
- assertU(adoc("id", "12", f, "G"));
- assertU(adoc("id", "13", f, "G"));
- assertU(adoc("id", "14", f, "G"));
- assertU(commit());
-
- assertQ("check counts for unlimited facet",
- req(params, "q", "id:[* TO *]"
- ,"facet", "true"
- ,"facet.field", f
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=7]"
-
- ,pre+"/int[@name='G'][.='5']"
- ,pre+"/int[@name='E'][.='3']"
- ,pre+"/int[@name='C'][.='2']"
-
- ,pre+"/int[@name='A'][.='1']"
- ,pre+"/int[@name='B'][.='1']"
- ,pre+"/int[@name='D'][.='1']"
- ,pre+"/int[@name='F'][.='1']"
- );
-
- assertQ("check counts for facet with generous limit",
- req(params, "q", "id:[* TO *]"
- ,"facet", "true"
- ,"facet.limit", "100"
- ,"facet.field", f
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=7]"
-
- ,pre+"/int[1][@name='G'][.='5']"
- ,pre+"/int[2][@name='E'][.='3']"
- ,pre+"/int[3][@name='C'][.='2']"
-
- ,pre+"/int[@name='A'][.='1']"
- ,pre+"/int[@name='B'][.='1']"
- ,pre+"/int[@name='D'][.='1']"
- ,pre+"/int[@name='F'][.='1']"
- );
-
- assertQ("check counts for limited facet",
- req(params, "q", "id:[* TO *]"
- ,"facet", "true"
- ,"facet.limit", "2"
- ,"facet.field", f
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
-
- ,pre+"/int[1][@name='G'][.='5']"
- ,pre+"/int[2][@name='E'][.='3']"
- );
-
- assertQ("check offset",
- req(params, "q", "id:[* TO *]"
- ,"facet", "true"
- ,"facet.offset", "1"
- ,"facet.limit", "1"
- ,"facet.field", f
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
-
- ,pre+"/int[1][@name='E'][.='3']"
- );
-
- assertQ("test sorted facet paging with zero (don't count in limit)",
- req(params, "q", "id:[* TO *]"
- ,"fq",notc
- ,"facet", "true"
- ,"facet.field", f
- ,"facet.mincount","1"
- ,"facet.offset","0"
- ,"facet.limit","6"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=6]"
- ,pre+"/int[1][@name='G'][.='5']"
- ,pre+"/int[2][@name='E'][.='3']"
- ,pre+"/int[3][@name='A'][.='1']"
- ,pre+"/int[4][@name='B'][.='1']"
- ,pre+"/int[5][@name='D'][.='1']"
- ,pre+"/int[6][@name='F'][.='1']"
- );
-
- assertQ("test sorted facet paging with zero (test offset correctness)",
- req(params, "q", "id:[* TO *]"
- ,"fq",notc
- ,"facet", "true"
- ,"facet.field", f
- ,"facet.mincount","1"
- ,"facet.offset","3"
- ,"facet.limit","2"
- ,"facet.sort","true"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
- ,pre+"/int[1][@name='B'][.='1']"
- ,pre+"/int[2][@name='D'][.='1']"
- );
-
- assertQ("test facet unsorted paging",
- req(params, "q", "id:[* TO *]"
- ,"fq",notc
- ,"facet", "true"
- ,"facet.field", f
- ,"facet.mincount","1"
- ,"facet.offset","0"
- ,"facet.limit","6"
- ,"facet.sort","false"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=6]"
- ,pre+"/int[1][@name='A'][.='1']"
- ,pre+"/int[2][@name='B'][.='1']"
- ,pre+"/int[3][@name='D'][.='1']"
- ,pre+"/int[4][@name='E'][.='3']"
- ,pre+"/int[5][@name='F'][.='1']"
- ,pre+"/int[6][@name='G'][.='5']"
- );
-
- assertQ("test facet unsorted paging",
- req(params, "q", "id:[* TO *]"
- ,"fq",notc
- ,"facet", "true"
- ,"facet.field", f
- ,"facet.mincount","1"
- ,"facet.offset","3"
- ,"facet.limit","2"
- ,"facet.sort","false"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
- ,pre+"/int[1][@name='E'][.='3']"
- ,pre+"/int[2][@name='F'][.='1']"
- );
-
- assertQ("test facet unsorted paging, mincount=2",
- req(params, "q", "id:[* TO *]"
- ,"fq",notc
- ,"facet", "true"
- ,"facet.field", f
- ,"facet.mincount","2"
- ,"facet.offset","1"
- ,"facet.limit","2"
- ,"facet.sort","false"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
- ,pre+"/int[1][@name='G'][.='5']"
- );
- }
-
-
-
- public void testFacetPrefixMultiValued() {
- doFacetPrefix("t_s");
- doFacetPrefix("t_s", "facet.enum.cache.minDf", "3");
- doFacetPrefix("t_s", "facet.enum.cache.minDf", "100");
- }
-
- public void testFacetPrefixSingleValued() {
- doFacetPrefix("t_s1");
- }
-
- public void doFacetPrefix(String f, String... params) {
- String indent="on";
- String pre = "//lst[@name='"+f+"']";
- String notc = "id:[* TO *] -"+f+":C";
-
- assertU(adoc("id", "1", f, "AAA"));
- assertU(adoc("id", "2", f, "B"));
- assertU(adoc("id", "3", f, "BB"));
- assertU(adoc("id", "4", f, "BB"));
- assertU(adoc("id", "5", f, "BBB"));
- assertU(adoc("id", "6", f, "BBB"));
- assertU(adoc("id", "7", f, "BBB"));
- assertU(adoc("id", "8", f, "CC"));
- assertU(adoc("id", "9", f, "CC"));
- assertU(adoc("id", "10", f, "CCC"));
- assertU(adoc("id", "11", f, "CCC"));
- assertU(adoc("id", "12", f, "CCC"));
- assertU(commit());
-
- assertQ("test facet.prefix middle, exact match first term",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","B"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=3]"
- ,pre+"/int[1][@name='BBB'][.='3']"
- ,pre+"/int[2][@name='BB'][.='2']"
- ,pre+"/int[3][@name='B'][.='1']"
- );
-
- assertQ("test facet.prefix middle, exact match first term, unsorted",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","false"
- ,"facet.prefix","B"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=3]"
- ,pre+"/int[1][@name='B'][.='1']"
- ,pre+"/int[2][@name='BB'][.='2']"
- ,pre+"/int[3][@name='BBB'][.='3']"
- );
-
-
- assertQ("test facet.prefix middle, exact match first term, unsorted",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","false"
- ,"facet.prefix","B"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=3]"
- ,pre+"/int[1][@name='B'][.='1']"
- ,pre+"/int[2][@name='BB'][.='2']"
- ,pre+"/int[3][@name='BBB'][.='3']"
- );
-
-
- assertQ("test facet.prefix middle, paging",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","1"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","B"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
- ,pre+"/int[1][@name='BB'][.='2']"
- ,pre+"/int[2][@name='B'][.='1']"
- );
-
- assertQ("test facet.prefix middle, paging",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","1"
- ,"facet.limit","1"
- ,"facet.sort","true"
- ,"facet.prefix","B"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
- ,pre+"/int[1][@name='BB'][.='2']"
- );
-
- assertQ("test facet.prefix middle, paging",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","1"
- ,"facet.limit","1"
- ,"facet.sort","true"
- ,"facet.prefix","B"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
- ,pre+"/int[1][@name='BB'][.='2']"
- );
-
- assertQ("test facet.prefix end, not exact match",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","C"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
- ,pre+"/int[1][@name='CCC'][.='3']"
- ,pre+"/int[2][@name='CC'][.='2']"
- );
-
- assertQ("test facet.prefix end, exact match",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","CC"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
- ,pre+"/int[1][@name='CCC'][.='3']"
- ,pre+"/int[2][@name='CC'][.='2']"
- );
-
- assertQ("test facet.prefix past end",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","X"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
- );
-
- assertQ("test facet.prefix past end",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","1"
- ,"facet.limit","-1"
- ,"facet.sort","true"
- ,"facet.prefix","X"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
- );
-
- assertQ("test facet.prefix at start, exact match",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","AAA"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
- ,pre+"/int[1][@name='AAA'][.='1']"
- );
- assertQ("test facet.prefix at Start, not exact match",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","AA"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
- ,pre+"/int[1][@name='AAA'][.='1']"
- );
- assertQ("test facet.prefix at Start, not exact match",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","AA"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
- ,pre+"/int[1][@name='AAA'][.='1']"
- );
- assertQ("test facet.prefix before start",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","0"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","999"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
- );
-
- assertQ("test facet.prefix before start",
- req(params, "q", "id:[* TO *]"
- ,"indent",indent
- ,"facet","true"
- ,"facet.field", f
- ,"facet.mincount","0"
- ,"facet.offset","2"
- ,"facet.limit","100"
- ,"facet.sort","true"
- ,"facet.prefix","999"
- )
- ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
- );
-
- }
-
private String mkstr(int len) {
StringBuilder sb = new StringBuilder(len);
Added: lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=679490&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java (added)
+++ lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java Thu Jul 24 12:02:17 2008
@@ -0,0 +1,737 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.request;
+
+import org.apache.solr.util.AbstractSolrTestCase;
+
+public class SimpleFacetsTest extends AbstractSolrTestCase {
+
+ public String getSchemaFile() { return "schema.xml"; }
+ public String getSolrConfigFile() { return "solrconfig.xml"; }
+ public String getCoreName() { return "basic"; }
+
+ public void testSimpleFacetCounts() {
+ assertU(adoc("id", "42", "trait_s", "Tool", "trait_s", "Obnoxious",
+ "name", "Zapp Brannigan"));
+ assertU(adoc("id", "43" ,
+ "title", "Democratic Order of Planets"));
+ assertU(adoc("id", "44", "trait_s", "Tool",
+ "name", "The Zapper"));
+ assertU(adoc("id", "45", "trait_s", "Chauvinist",
+ "title", "25 star General"));
+ assertU(adoc("id", "46", "trait_s", "Obnoxious",
+ "subject", "Defeated the pacifists of the Gandhi nebula"));
+ assertU(adoc("id", "47", "trait_s", "Pig",
+ "text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
+ assertU(commit());
+
+ assertQ("standard request handler returns all matches",
+ req("id:[42 TO 47]"),
+ "*[count(//doc)=6]"
+ );
+
+ assertQ("filter results using fq",
+ req("q","id:[42 TO 46]",
+ "fq", "id:[43 TO 47]"),
+ "*[count(//doc)=4]"
+ );
+
+ assertQ("don't filter results using blank fq",
+ req("q","id:[42 TO 46]",
+ "fq", " "),
+ "*[count(//doc)=5]"
+ );
+
+ assertQ("filter results using multiple fq params",
+ req("q","id:[42 TO 46]",
+ "fq", "trait_s:Obnoxious",
+ "fq", "id:[43 TO 47]"),
+ "*[count(//doc)=1]"
+ );
+
+ assertQ("check counts for facet queries",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"facet.query", "trait_s:Obnoxious"
+ ,"facet.query", "id:[42 TO 45]"
+ ,"facet.query", "id:[43 TO 47]"
+ ,"facet.field", "trait_s"
+ )
+ ,"*[count(//doc)=6]"
+
+ ,"//lst[@name='facet_counts']/lst[@name='facet_queries']"
+ ,"//lst[@name='facet_queries']/int[@name='trait_s:Obnoxious'][.='2']"
+ ,"//lst[@name='facet_queries']/int[@name='id:[42 TO 45]'][.='4']"
+ ,"//lst[@name='facet_queries']/int[@name='id:[43 TO 47]'][.='5']"
+
+ ,"//lst[@name='facet_counts']/lst[@name='facet_fields']"
+ ,"//lst[@name='facet_fields']/lst[@name='trait_s']"
+ ,"*[count(//lst[@name='trait_s']/int)=4]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Pig'][.='1']"
+ );
+
+ assertQ("check counts for applied facet queries using filtering (fq)",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"fq", "id:[42 TO 45]"
+ ,"facet.field", "trait_s"
+ ,"facet.query", "id:[42 TO 45]"
+ ,"facet.query", "id:[43 TO 47]"
+ )
+ ,"*[count(//doc)=4]"
+ ,"//lst[@name='facet_counts']/lst[@name='facet_queries']"
+ ,"//lst[@name='facet_queries']/int[@name='id:[42 TO 45]'][.='4']"
+ ,"//lst[@name='facet_queries']/int[@name='id:[43 TO 47]'][.='3']"
+ ,"*[count(//lst[@name='trait_s']/int)=4]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Pig'][.='0']"
+ );
+
+ assertQ("check counts with facet.zero=false&facet.missing=true using fq",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"facet.zeros", "false"
+ ,"f.trait_s.facet.missing", "true"
+ ,"fq", "id:[42 TO 45]"
+ ,"facet.field", "trait_s"
+ )
+ ,"*[count(//doc)=4]"
+ ,"*[count(//lst[@name='trait_s']/int)=4]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
+ ,"//lst[@name='trait_s']/int[not(@name)][.='1']"
+ );
+
+ assertQ("check counts with facet.mincount=1&facet.missing=true using fq",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"facet.mincount", "1"
+ ,"f.trait_s.facet.missing", "true"
+ ,"fq", "id:[42 TO 45]"
+ ,"facet.field", "trait_s"
+ )
+ ,"*[count(//doc)=4]"
+ ,"*[count(//lst[@name='trait_s']/int)=4]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
+ ,"//lst[@name='trait_s']/int[not(@name)][.='1']"
+ );
+
+ assertQ("check counts with facet.mincount=2&facet.missing=true using fq",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"facet.mincount", "2"
+ ,"f.trait_s.facet.missing", "true"
+ ,"fq", "id:[42 TO 45]"
+ ,"facet.field", "trait_s"
+ )
+ ,"*[count(//doc)=4]"
+ ,"*[count(//lst[@name='trait_s']/int)=2]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[not(@name)][.='1']"
+ );
+
+ assertQ("check sorted paging",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"fq", "id:[42 TO 45]"
+ ,"facet.field", "trait_s"
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","4"
+ )
+ ,"*[count(//lst[@name='trait_s']/int)=4]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Pig'][.='0']"
+ );
+
+ assertQ("check sorted paging",
+ req("q", "id:[42 TO 47]"
+ ,"facet", "true"
+ ,"fq", "id:[42 TO 45]"
+ ,"facet.field", "trait_s"
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","3"
+ )
+ ,"*[count(//lst[@name='trait_s']/int)=3]"
+ ,"//lst[@name='trait_s']/int[@name='Tool'][.='2']"
+ ,"//lst[@name='trait_s']/int[@name='Obnoxious'][.='1']"
+ ,"//lst[@name='trait_s']/int[@name='Chauvinist'][.='1']"
+ );
+
+ }
+
+ public void testDateFacets() {
+ final String f = "bday";
+ final String pre = "//lst[@name='facet_dates']/lst[@name='"+f+"']";
+
+ assertU(adoc("id", "1", f, "1976-07-04T12:08:56.235Z"));
+ assertU(adoc("id", "2", f, "1976-07-05T00:00:00.000Z"));
+ assertU(adoc("id", "3", f, "1976-07-15T00:07:67.890Z"));
+ assertU(adoc("id", "4", f, "1976-07-21T00:07:67.890Z"));
+ assertU(adoc("id", "5", f, "1976-07-13T12:12:25.255Z"));
+ assertU(adoc("id", "6", f, "1976-07-03T17:01:23.456Z"));
+ assertU(adoc("id", "7", f, "1976-07-12T12:12:25.255Z"));
+ assertU(adoc("id", "8", f, "1976-07-15T15:15:15.155Z"));
+ assertU(adoc("id", "9", f, "1907-07-12T13:13:23.235Z"));
+ assertU(adoc("id", "10", f, "1976-07-03T11:02:45.678Z"));
+ assertU(adoc("id", "11", f, "1907-07-12T12:12:25.255Z"));
+ assertU(adoc("id", "12", f, "2007-07-30T07:07:07.070Z"));
+ assertU(adoc("id", "13", f, "1976-07-30T22:22:22.222Z"));
+ assertU(adoc("id", "14", f, "1976-07-05T22:22:22.222Z"));
+ assertU(commit());
+
+ assertQ("check counts for month of facet by day",
+ req( "q", "*:*"
+ ,"rows", "0"
+ ,"facet", "true"
+ ,"facet.date", f
+ ,"facet.date.start", "1976-07-01T00:00:00.000Z"
+ ,"facet.date.end", "1976-07-01T00:00:00.000Z+1MONTH"
+ ,"facet.date.gap", "+1DAY"
+ ,"facet.date.other", "all"
+ )
+ // 31 days + pre+post+inner = 34
+ ,"*[count("+pre+"/int)=34]"
+ ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='0' ]"
+ ,pre+"/int[@name='1976-07-02T00:00:00Z'][.='0' ]"
+ ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2' ]"
+ // july4th = 2 because exists doc @ 00:00:00.000 on July5
+ // (date faceting is inclusive)
+ ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2' ]"
+ ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2' ]"
+ ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-07T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-08T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-09T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-10T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-11T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-12T00:00:00Z'][.='1' ]"
+ ,pre+"/int[@name='1976-07-13T00:00:00Z'][.='1' ]"
+ ,pre+"/int[@name='1976-07-14T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-15T00:00:00Z'][.='2' ]"
+ ,pre+"/int[@name='1976-07-16T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-17T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-18T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-19T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-21T00:00:00Z'][.='1' ]"
+ ,pre+"/int[@name='1976-07-22T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-23T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-24T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-25T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-26T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-27T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-28T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-29T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-30T00:00:00Z'][.='1' ]"
+ ,pre+"/int[@name='1976-07-31T00:00:00Z'][.='0']"
+
+ ,pre+"/int[@name='before' ][.='2']"
+ ,pre+"/int[@name='after' ][.='1']"
+ ,pre+"/int[@name='between'][.='11']"
+
+ );
+
+ assertQ("check hardend=false",
+ req( "q", "*:*"
+ ,"rows", "0"
+ ,"facet", "true"
+ ,"facet.date", f
+ ,"facet.date.start", "1976-07-01T00:00:00.000Z"
+ ,"facet.date.end", "1976-07-13T00:00:00.000Z"
+ ,"facet.date.gap", "+5DAYS"
+ ,"facet.date.other", "all"
+ ,"facet.date.hardend","false"
+ )
+ // 3 gaps + pre+post+inner = 6
+ ,"*[count("+pre+"/int)=6]"
+ ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='5' ]"
+ ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0' ]"
+ ,pre+"/int[@name='1976-07-11T00:00:00Z'][.='4' ]"
+
+ ,pre+"/int[@name='before' ][.='2']"
+ ,pre+"/int[@name='after' ][.='3']"
+ ,pre+"/int[@name='between'][.='9']"
+ );
+
+ assertQ("check hardend=true",
+ req( "q", "*:*"
+ ,"rows", "0"
+ ,"facet", "true"
+ ,"facet.date", f
+ ,"facet.date.start", "1976-07-01T00:00:00.000Z"
+ ,"facet.date.end", "1976-07-13T00:00:00.000Z"
+ ,"facet.date.gap", "+5DAYS"
+ ,"facet.date.other", "all"
+ ,"facet.date.hardend","true"
+ )
+ // 3 gaps + pre+post+inner = 6
+ ,"*[count("+pre+"/int)=6]"
+ ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='5' ]"
+ ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0' ]"
+ ,pre+"/int[@name='1976-07-11T00:00:00Z'][.='1' ]"
+
+ ,pre+"/int[@name='before' ][.='2']"
+ ,pre+"/int[@name='after' ][.='6']"
+ ,pre+"/int[@name='between'][.='6']"
+ );
+
+ }
+
+ public void testFacetMultiValued() {
+ doFacets("t_s");
+ doFacets("t_s", "facet.enum.cache.minDf", "2");
+ doFacets("t_s", "facet.enum.cache.minDf", "100");
+ }
+
+ public void testFacetSingleValued() {
+ doFacets("t_s1");
+ }
+
+ public void doFacets(String f, String... params) {
+ String pre = "//lst[@name='"+f+"']";
+ String notc = "id:[* TO *] -"+f+":C";
+
+ assertU(adoc("id", "1", f, "A"));
+ assertU(adoc("id", "2", f, "B"));
+ assertU(adoc("id", "3", f, "C"));
+ assertU(adoc("id", "4", f, "C"));
+ assertU(adoc("id", "5", f, "D"));
+ assertU(adoc("id", "6", f, "E"));
+ assertU(adoc("id", "7", f, "E"));
+ assertU(adoc("id", "8", f, "E"));
+ assertU(adoc("id", "9", f, "F"));
+ assertU(adoc("id", "10", f, "G"));
+ assertU(adoc("id", "11", f, "G"));
+ assertU(adoc("id", "12", f, "G"));
+ assertU(adoc("id", "13", f, "G"));
+ assertU(adoc("id", "14", f, "G"));
+ assertU(commit());
+
+ assertQ("check counts for unlimited facet",
+ req(params, "q", "id:[* TO *]"
+ ,"facet", "true"
+ ,"facet.field", f
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=7]"
+
+ ,pre+"/int[@name='G'][.='5']"
+ ,pre+"/int[@name='E'][.='3']"
+ ,pre+"/int[@name='C'][.='2']"
+
+ ,pre+"/int[@name='A'][.='1']"
+ ,pre+"/int[@name='B'][.='1']"
+ ,pre+"/int[@name='D'][.='1']"
+ ,pre+"/int[@name='F'][.='1']"
+ );
+
+ assertQ("check counts for facet with generous limit",
+ req(params, "q", "id:[* TO *]"
+ ,"facet", "true"
+ ,"facet.limit", "100"
+ ,"facet.field", f
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=7]"
+
+ ,pre+"/int[1][@name='G'][.='5']"
+ ,pre+"/int[2][@name='E'][.='3']"
+ ,pre+"/int[3][@name='C'][.='2']"
+
+ ,pre+"/int[@name='A'][.='1']"
+ ,pre+"/int[@name='B'][.='1']"
+ ,pre+"/int[@name='D'][.='1']"
+ ,pre+"/int[@name='F'][.='1']"
+ );
+
+ assertQ("check counts for limited facet",
+ req(params, "q", "id:[* TO *]"
+ ,"facet", "true"
+ ,"facet.limit", "2"
+ ,"facet.field", f
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
+
+ ,pre+"/int[1][@name='G'][.='5']"
+ ,pre+"/int[2][@name='E'][.='3']"
+ );
+
+ assertQ("check offset",
+ req(params, "q", "id:[* TO *]"
+ ,"facet", "true"
+ ,"facet.offset", "1"
+ ,"facet.limit", "1"
+ ,"facet.field", f
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+
+ ,pre+"/int[1][@name='E'][.='3']"
+ );
+
+ assertQ("test sorted facet paging with zero (don't count in limit)",
+ req(params, "q", "id:[* TO *]"
+ ,"fq",notc
+ ,"facet", "true"
+ ,"facet.field", f
+ ,"facet.mincount","1"
+ ,"facet.offset","0"
+ ,"facet.limit","6"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=6]"
+ ,pre+"/int[1][@name='G'][.='5']"
+ ,pre+"/int[2][@name='E'][.='3']"
+ ,pre+"/int[3][@name='A'][.='1']"
+ ,pre+"/int[4][@name='B'][.='1']"
+ ,pre+"/int[5][@name='D'][.='1']"
+ ,pre+"/int[6][@name='F'][.='1']"
+ );
+
+ assertQ("test sorted facet paging with zero (test offset correctness)",
+ req(params, "q", "id:[* TO *]"
+ ,"fq",notc
+ ,"facet", "true"
+ ,"facet.field", f
+ ,"facet.mincount","1"
+ ,"facet.offset","3"
+ ,"facet.limit","2"
+ ,"facet.sort","true"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
+ ,pre+"/int[1][@name='B'][.='1']"
+ ,pre+"/int[2][@name='D'][.='1']"
+ );
+
+ assertQ("test facet unsorted paging",
+ req(params, "q", "id:[* TO *]"
+ ,"fq",notc
+ ,"facet", "true"
+ ,"facet.field", f
+ ,"facet.mincount","1"
+ ,"facet.offset","0"
+ ,"facet.limit","6"
+ ,"facet.sort","false"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=6]"
+ ,pre+"/int[1][@name='A'][.='1']"
+ ,pre+"/int[2][@name='B'][.='1']"
+ ,pre+"/int[3][@name='D'][.='1']"
+ ,pre+"/int[4][@name='E'][.='3']"
+ ,pre+"/int[5][@name='F'][.='1']"
+ ,pre+"/int[6][@name='G'][.='5']"
+ );
+
+ assertQ("test facet unsorted paging",
+ req(params, "q", "id:[* TO *]"
+ ,"fq",notc
+ ,"facet", "true"
+ ,"facet.field", f
+ ,"facet.mincount","1"
+ ,"facet.offset","3"
+ ,"facet.limit","2"
+ ,"facet.sort","false"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
+ ,pre+"/int[1][@name='E'][.='3']"
+ ,pre+"/int[2][@name='F'][.='1']"
+ );
+
+ assertQ("test facet unsorted paging, mincount=2",
+ req(params, "q", "id:[* TO *]"
+ ,"fq",notc
+ ,"facet", "true"
+ ,"facet.field", f
+ ,"facet.mincount","2"
+ ,"facet.offset","1"
+ ,"facet.limit","2"
+ ,"facet.sort","false"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+ ,pre+"/int[1][@name='G'][.='5']"
+ );
+ }
+
+
+
+ public void testFacetPrefixMultiValued() {
+ doFacetPrefix("t_s");
+ doFacetPrefix("t_s", "facet.enum.cache.minDf", "3");
+ doFacetPrefix("t_s", "facet.enum.cache.minDf", "100");
+ }
+
+ public void testFacetPrefixSingleValued() {
+ doFacetPrefix("t_s1");
+ }
+
+ public void doFacetPrefix(String f, String... params) {
+ String indent="on";
+ String pre = "//lst[@name='"+f+"']";
+ String notc = "id:[* TO *] -"+f+":C";
+
+ assertU(adoc("id", "1", f, "AAA"));
+ assertU(adoc("id", "2", f, "B"));
+ assertU(adoc("id", "3", f, "BB"));
+ assertU(adoc("id", "4", f, "BB"));
+ assertU(adoc("id", "5", f, "BBB"));
+ assertU(adoc("id", "6", f, "BBB"));
+ assertU(adoc("id", "7", f, "BBB"));
+ assertU(adoc("id", "8", f, "CC"));
+ assertU(adoc("id", "9", f, "CC"));
+ assertU(adoc("id", "10", f, "CCC"));
+ assertU(adoc("id", "11", f, "CCC"));
+ assertU(adoc("id", "12", f, "CCC"));
+ assertU(commit());
+
+ assertQ("test facet.prefix middle, exact match first term",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","B"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=3]"
+ ,pre+"/int[1][@name='BBB'][.='3']"
+ ,pre+"/int[2][@name='BB'][.='2']"
+ ,pre+"/int[3][@name='B'][.='1']"
+ );
+
+ assertQ("test facet.prefix middle, exact match first term, unsorted",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","false"
+ ,"facet.prefix","B"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=3]"
+ ,pre+"/int[1][@name='B'][.='1']"
+ ,pre+"/int[2][@name='BB'][.='2']"
+ ,pre+"/int[3][@name='BBB'][.='3']"
+ );
+
+
+ assertQ("test facet.prefix middle, exact match first term, unsorted",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","false"
+ ,"facet.prefix","B"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=3]"
+ ,pre+"/int[1][@name='B'][.='1']"
+ ,pre+"/int[2][@name='BB'][.='2']"
+ ,pre+"/int[3][@name='BBB'][.='3']"
+ );
+
+
+ assertQ("test facet.prefix middle, paging",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","1"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","B"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
+ ,pre+"/int[1][@name='BB'][.='2']"
+ ,pre+"/int[2][@name='B'][.='1']"
+ );
+
+ assertQ("test facet.prefix middle, paging",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","1"
+ ,"facet.limit","1"
+ ,"facet.sort","true"
+ ,"facet.prefix","B"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+ ,pre+"/int[1][@name='BB'][.='2']"
+ );
+
+ assertQ("test facet.prefix middle, paging",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","1"
+ ,"facet.limit","1"
+ ,"facet.sort","true"
+ ,"facet.prefix","B"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+ ,pre+"/int[1][@name='BB'][.='2']"
+ );
+
+ assertQ("test facet.prefix end, not exact match",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","C"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
+ ,pre+"/int[1][@name='CCC'][.='3']"
+ ,pre+"/int[2][@name='CC'][.='2']"
+ );
+
+ assertQ("test facet.prefix end, exact match",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","CC"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=2]"
+ ,pre+"/int[1][@name='CCC'][.='3']"
+ ,pre+"/int[2][@name='CC'][.='2']"
+ );
+
+ assertQ("test facet.prefix past end",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","X"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
+ );
+
+ assertQ("test facet.prefix past end",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","1"
+ ,"facet.limit","-1"
+ ,"facet.sort","true"
+ ,"facet.prefix","X"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
+ );
+
+ assertQ("test facet.prefix at start, exact match",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","AAA"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+ ,pre+"/int[1][@name='AAA'][.='1']"
+ );
+ assertQ("test facet.prefix at Start, not exact match",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","AA"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+ ,pre+"/int[1][@name='AAA'][.='1']"
+ );
+ assertQ("test facet.prefix at Start, not exact match",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","AA"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=1]"
+ ,pre+"/int[1][@name='AAA'][.='1']"
+ );
+ assertQ("test facet.prefix before start",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","0"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","999"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
+ );
+
+ assertQ("test facet.prefix before start",
+ req(params, "q", "id:[* TO *]"
+ ,"indent",indent
+ ,"facet","true"
+ ,"facet.field", f
+ ,"facet.mincount","0"
+ ,"facet.offset","2"
+ ,"facet.limit","100"
+ ,"facet.sort","true"
+ ,"facet.prefix","999"
+ )
+ ,"*[count(//lst[@name='facet_fields']/lst/int)=0]"
+ );
+
+ }
+}
Propchange: lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL