mirror of https://github.com/apache/lucene.git
SOLR-645: Refactory faceting tests into SimpleFacetsTest
git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@679490 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c16ddbb9b9
commit
3d140bcfb6
|
@ -542,6 +542,8 @@ Other Changes
|
|||
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:
|
||||
|
|
|
@ -463,717 +463,6 @@ public class BasicFunctionalityTest extends AbstractSolrTestCase {
|
|||
);
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
|
|
|
@ -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]"
|
||||
);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue