diff --git a/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java b/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java index 1d8f2308c6b..1a42e2781e5 100644 --- a/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java +++ b/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java @@ -151,8 +151,7 @@ void doTestJoin(String joinPrefix) throws Exception { "/response=={'numFound':3,'start':0,'numFoundExact':true,'docs':[{'id':'1'},{'id':'4'},{'id':'5'}]}"); assertJQ( - req( - "qt", + reqWithPath( "/export", "q", joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev", diff --git a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java index 341e406d17c..661dd4da794 100644 --- a/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java +++ b/solr/core/src/test/org/apache/solr/handler/MoreLikeThisHandlerTest.java @@ -221,16 +221,14 @@ public void testInterface() { // test that qparser plugins work w/ the MoreLikeThisHandler params.set(CommonParams.Q, "{!field f=id}44"); - try (SolrQueryRequest mltreq = new SolrQueryRequestBase(core, params)) { - assertQ(null, "/mlt", mltreq, "//result/doc[1]/str[@name='id'][.='45']"); + try (SolrQueryRequest mltreq = withPath("/mlt", new SolrQueryRequestBase(core, params))) { + assertQ(mltreq, "//result/doc[1]/str[@name='id'][.='45']"); } // test that debugging works (test for MoreLikeThis*Handler*) params.set(CommonParams.DEBUG_QUERY, "true"); - try (SolrQueryRequest mltreq = new SolrQueryRequestBase(core, params)) { + try (SolrQueryRequest mltreq = withPath("/mlt", new SolrQueryRequestBase(core, params))) { assertQ( - null, - "/mlt", mltreq, "//result/doc[1]/str[@name='id'][.='45']", "//lst[@name='debug']/lst[@name='explain']"); @@ -238,20 +236,16 @@ public void testInterface() { params.set(FacetComponent.COMPONENT_NAME, "true"); params.set("facet.field", "name"); - try (SolrQueryRequest mltreq = new SolrQueryRequestBase(core, params)) { + try (SolrQueryRequest mltreq = withPath("/mlt", new SolrQueryRequestBase(core, params))) { assertQ( - null, - "/mlt", mltreq, "//result/doc[1]/str[@name='id'][.='45']", "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name']/int[@name='George'][.='1']"); } params.set("facet.field", "{!ex=tg}name"); params.set("fq", "{!tag=tg}name:George"); - try (SolrQueryRequest mltreq = new SolrQueryRequestBase(core, params)) { + try (SolrQueryRequest mltreq = withPath("/mlt", new SolrQueryRequestBase(core, params))) { assertQ( - null, - "/mlt", mltreq, "//result/doc[1]/str[@name='id'][.='45']", "//lst[@name='facet_counts']/lst[@name='facet_fields']/lst[@name='name']/int[@name='George'][.='1']"); @@ -279,12 +273,11 @@ public void testMultifieldSimilarity() { try (SolrQueryRequestBase req = new SolrQueryRequestBase(core, params) {}) { req.setContentStreams(List.of(new ContentStreamBase.StringStream("bbb", "zzz"))); + req.getContext().put(CommonParams.PATH, "/mlt"); // Make sure we have terms from both fields in the interestingTerms array and all documents // have been retrieved as matching. assertQ( - null, - "/mlt", req, "//lst[@name = 'interestingTerms']/float[@name = 'subword:bbb']", "//lst[@name = 'interestingTerms']/float[@name = 'name:bbb']", diff --git a/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java index aa2b70c0132..5079fb9970f 100644 --- a/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java +++ b/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java @@ -118,13 +118,7 @@ public void testFieldType() throws Exception { assertQ( "", - req( - CommonParams.Q, - "AAAA", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "AAAA", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='7']", "//result/doc[2]/str[@name='id'][.='9']", @@ -156,10 +150,7 @@ public void testFq() throws Exception { // elevated docs 1, 2, and 3 are returned even though our query "ZZZZ" doesn't match them assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "ZZZZ", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -172,11 +163,14 @@ public void testFq() throws Exception { // exclude docs 1 and 3 even though those docs are elevated assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "str_s:b"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "str_s:b"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -186,12 +180,16 @@ public void testFq() throws Exception { // docs assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1,test2}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test3"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1,test2}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test3"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -200,12 +198,16 @@ public void testFq() throws Exception { // behavior as above; the filter still takes effect on the elevated docs assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1,test2}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, ","), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1,test2}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + ","), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -215,12 +217,16 @@ public void testFq() throws Exception { // the original filter assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1,test2}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test0,test2,test4"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1,test2}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test0,test2,test4"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -233,12 +239,16 @@ public void testFq() throws Exception { // this case, the main query); nor does including empty values in the list of tags to exclude assertQ( "", - req( - CommonParams.Q, "{!tag=test0}ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1,test1,test2,test2}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test0,test0,test2,test2,test4,test4,,,"), + reqWithPath( + "/elevate", + CommonParams.Q, + "{!tag=test0}ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1,test1,test2,test2}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test0,test0,test2,test2,test4,test4,,,"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -250,14 +260,20 @@ public void testFq() throws Exception { // we can exclude some filters while leaving others in place assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1}id:10", - CommonParams.FQ, "{!tag=test2}str_s:b", - CommonParams.FQ, "{!tag=test3}id:11", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1,test3"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1}id:10", + CommonParams.FQ, + "{!tag=test2}str_s:b", + CommonParams.FQ, + "{!tag=test3}id:11", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1,test3"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -265,14 +281,20 @@ public void testFq() throws Exception { // when filters are marked as cache=false, tag exclusion works the same as before assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1 cache=false}id:10", - CommonParams.FQ, "{!tag=test2 cache=false}str_s:b", - CommonParams.FQ, "{!tag=test3 cache=false}id:11", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1,test3"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1 cache=false}id:10", + CommonParams.FQ, + "{!tag=test2 cache=false}str_s:b", + CommonParams.FQ, + "{!tag=test3 cache=false}id:11", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1,test3"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -280,14 +302,20 @@ public void testFq() throws Exception { // we can apply the same tag to two different filters assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1}id:10", - CommonParams.FQ, "{!tag=test2}str_s:b", - CommonParams.FQ, "{!tag=test1}id:11", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1,test3"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1}id:10", + CommonParams.FQ, + "{!tag=test2}str_s:b", + CommonParams.FQ, + "{!tag=test1}id:11", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1,test3"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -295,13 +323,18 @@ public void testFq() throws Exception { // we can use filter() syntax inside fq's that are tagged for exclusion assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1}+filter(id:10) +filter(id:11)", - CommonParams.FQ, "{!tag=test2}filter(str_s:b)", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1}+filter(id:10) +filter(id:11)", + CommonParams.FQ, + "{!tag=test2}filter(str_s:b)", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -310,10 +343,7 @@ public void testFq() throws Exception { // if we search for MMMM we should get one match; no documents are elevated for this query assertQ( "", - req( - CommonParams.Q, "MMMM", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "MMMM", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='4']", "//result/doc[1]/bool[@name='[elevated]'][.='false']"); @@ -321,11 +351,14 @@ public void testFq() throws Exception { // if we add fq=str_s:b, our one document that matches MMMM will be filtered out assertQ( "", - req( - CommonParams.Q, "MMMM", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "str_s:b"), + reqWithPath( + "/elevate", + CommonParams.Q, + "MMMM", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "str_s:b"), "//*[@numFound='0']"); // if we tag the filter and exclude it, we should see the same behavior as before; filters are @@ -333,23 +366,30 @@ public void testFq() throws Exception { // subject to the filter assertQ( "", - req( - CommonParams.Q, "MMMM", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!tag=test1}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1"), + reqWithPath( + "/elevate", + CommonParams.Q, + "MMMM", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!tag=test1}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1"), "//*[@numFound='0']"); // the next few assertions confirm that collapsing works as expected when filters are // excluded; first, confirm that when collapsing, all elevated docs are visible by default assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!collapse field=str_s sort='score desc'}"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!collapse field=str_s sort='score desc'}"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -361,12 +401,16 @@ public void testFq() throws Exception { // when collapsing, an added filter has the expected effect assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!collapse field=str_s sort='score desc'}", - CommonParams.FQ, "str_s:b"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!collapse field=str_s sort='score desc'}", + CommonParams.FQ, + "str_s:b"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); @@ -375,13 +419,18 @@ public void testFq() throws Exception { // elevated documents assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!collapse field=str_s sort='score desc'}", - CommonParams.FQ, "{!tag=test1}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!collapse field=str_s sort='score desc'}", + CommonParams.FQ, + "{!tag=test1}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -394,13 +443,18 @@ public void testFq() throws Exception { // user should be informed assertQEx( "tagging a collapse filter for exclusion should lead to a BAD_REQUEST", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!collapse tag=test1 field=str_s sort='score desc'}", - CommonParams.FQ, "{!tag=test2}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1,test2"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!collapse tag=test1 field=str_s sort='score desc'}", + CommonParams.FQ, + "{!tag=test2}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1,test2"), SolrException.ErrorCode.BAD_REQUEST); // if a function range query is provided as a filter, it can be tagged for exclusion; @@ -410,13 +464,18 @@ public void testFq() throws Exception { // behavior assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CommonParams.FL, "id, score, [elevated]", - CommonParams.FQ, "{!frange tag=test1 l=100 cache=false cost=200}5.0", - CommonParams.FQ, "{!tag=test2}str_s:b", - QueryElevationParams.ELEVATE_EXCLUDE_TAGS, "test1,test2"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CommonParams.FL, + "id, score, [elevated]", + CommonParams.FQ, + "{!frange tag=test1 l=100 cache=false cost=200}5.0", + CommonParams.FQ, + "{!tag=test2}str_s:b", + QueryElevationParams.ELEVATE_EXCLUDE_TAGS, + "test1,test2"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -454,7 +513,6 @@ public void testFqWithCacheAndCostLocalParams() throws Exception { try (SolrQueryRequest request = req( CommonParams.Q, "ZZZZ1", - CommonParams.QT, "/elevate", CommonParams.DF, "text", CommonParams.FL, "id, score, [elevated]", CommonParams.FQ, "str_s:A", @@ -524,7 +582,6 @@ public void testFqWithCacheAndCostLocalParams() throws Exception { try (SolrQueryRequest request = req( CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", CommonParams.DF, "text", CommonParams.FL, "id, score, [elevated]", CommonParams.FQ, "str_s:A", @@ -677,15 +734,22 @@ public void testGroupedQuery() throws Exception { assertQ( "non-elevated group query", - req( - CommonParams.Q, "AAAA", - CommonParams.QT, "/elevate", - GroupParams.GROUP_FIELD, "str_s", - GroupParams.GROUP, "true", - GroupParams.GROUP_TOTAL_COUNT, "true", - GroupParams.GROUP_LIMIT, "100", - QueryElevationParams.ENABLE, "false", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "AAAA", + GroupParams.GROUP_FIELD, + "str_s", + GroupParams.GROUP, + "true", + GroupParams.GROUP_TOTAL_COUNT, + "true", + GroupParams.GROUP_LIMIT, + "100", + QueryElevationParams.ENABLE, + "false", + CommonParams.FL, + "id, score, [elevated]"), "//*[@name='ngroups'][.='3']", "//*[@name='matches'][.='6']", groups + "/lst[1]//doc[1]/str[@name='id'][.='6']", @@ -703,14 +767,20 @@ public void testGroupedQuery() throws Exception { assertQ( "elevated group query", - req( - CommonParams.Q, "AAAA", - CommonParams.QT, "/elevate", - GroupParams.GROUP_FIELD, "str_s", - GroupParams.GROUP, "true", - GroupParams.GROUP_TOTAL_COUNT, "true", - GroupParams.GROUP_LIMIT, "100", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "AAAA", + GroupParams.GROUP_FIELD, + "str_s", + GroupParams.GROUP, + "true", + GroupParams.GROUP_TOTAL_COUNT, + "true", + GroupParams.GROUP_LIMIT, + "100", + CommonParams.FL, + "id, score, [elevated]"), "//*[@name='ngroups'][.='3']", "//*[@name='matches'][.='6']", groups + "/lst[1]//doc[1]/str[@name='id'][.='7']", @@ -728,15 +798,22 @@ public void testGroupedQuery() throws Exception { assertQ( "non-elevated because sorted group query", - req( - CommonParams.Q, "AAAA", - CommonParams.QT, "/elevate", - CommonParams.SORT, "id asc", - GroupParams.GROUP_FIELD, "str_s", - GroupParams.GROUP, "true", - GroupParams.GROUP_TOTAL_COUNT, "true", - GroupParams.GROUP_LIMIT, "100", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "AAAA", + CommonParams.SORT, + "id asc", + GroupParams.GROUP_FIELD, + "str_s", + GroupParams.GROUP, + "true", + GroupParams.GROUP_TOTAL_COUNT, + "true", + GroupParams.GROUP_LIMIT, + "100", + CommonParams.FL, + "id, score, [elevated]"), "//*[@name='ngroups'][.='3']", "//*[@name='matches'][.='6']", groups + "/lst[1]//doc[1]/str[@name='id'][.='2']", @@ -754,16 +831,24 @@ public void testGroupedQuery() throws Exception { assertQ( "force-elevated sorted group query", - req( - CommonParams.Q, "AAAA", - CommonParams.QT, "/elevate", - CommonParams.SORT, "id asc", - QueryElevationParams.FORCE_ELEVATION, "true", - GroupParams.GROUP_FIELD, "str_s", - GroupParams.GROUP, "true", - GroupParams.GROUP_TOTAL_COUNT, "true", - GroupParams.GROUP_LIMIT, "100", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "AAAA", + CommonParams.SORT, + "id asc", + QueryElevationParams.FORCE_ELEVATION, + "true", + GroupParams.GROUP_FIELD, + "str_s", + GroupParams.GROUP, + "true", + GroupParams.GROUP_TOTAL_COUNT, + "true", + GroupParams.GROUP_LIMIT, + "100", + CommonParams.FL, + "id, score, [elevated]"), "//*[@name='ngroups'][.='3']", "//*[@name='matches'][.='6']", groups + "/lst[1]//doc[1]/str[@name='id'][.='7']", @@ -781,16 +866,24 @@ public void testGroupedQuery() throws Exception { assertQ( "non-elevated because of sort within group query", - req( - CommonParams.Q, "AAAA", - CommonParams.QT, "/elevate", - CommonParams.SORT, "id asc", - GroupParams.GROUP_SORT, "id desc", - GroupParams.GROUP_FIELD, "str_s", - GroupParams.GROUP, "true", - GroupParams.GROUP_TOTAL_COUNT, "true", - GroupParams.GROUP_LIMIT, "100", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "AAAA", + CommonParams.SORT, + "id asc", + GroupParams.GROUP_SORT, + "id desc", + GroupParams.GROUP_FIELD, + "str_s", + GroupParams.GROUP, + "true", + GroupParams.GROUP_TOTAL_COUNT, + "true", + GroupParams.GROUP_LIMIT, + "100", + CommonParams.FL, + "id, score, [elevated]"), "//*[@name='ngroups'][.='3']", "//*[@name='matches'][.='6']", groups + "/lst[1]//doc[1]/str[@name='id'][.='22']", @@ -808,17 +901,26 @@ public void testGroupedQuery() throws Exception { assertQ( "force elevated sort within sorted group query", - req( - CommonParams.Q, "AAAA", - CommonParams.QT, "/elevate", - CommonParams.SORT, "id asc", - GroupParams.GROUP_SORT, "id desc", - QueryElevationParams.FORCE_ELEVATION, "true", - GroupParams.GROUP_FIELD, "str_s", - GroupParams.GROUP, "true", - GroupParams.GROUP_TOTAL_COUNT, "true", - GroupParams.GROUP_LIMIT, "100", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "AAAA", + CommonParams.SORT, + "id asc", + GroupParams.GROUP_SORT, + "id desc", + QueryElevationParams.FORCE_ELEVATION, + "true", + GroupParams.GROUP_FIELD, + "str_s", + GroupParams.GROUP, + "true", + GroupParams.GROUP_TOTAL_COUNT, + "true", + GroupParams.GROUP_LIMIT, + "100", + CommonParams.FL, + "id, score, [elevated]"), "//*[@name='ngroups'][.='3']", "//*[@name='matches'][.='6']", groups + "/lst[1]//doc[1]/str[@name='id'][.='7']", @@ -859,13 +961,7 @@ public void testTrieFieldType() throws Exception { assertQ( "", - req( - CommonParams.Q, - "AAAA", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "AAAA", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='7']", "//result/doc[2]/str[@name='id'][.='8']", @@ -933,7 +1029,7 @@ public void testInterface() throws Exception { assertQ( "Make sure QEC handles null queries", - req("qt", "/elevate", "q.alt", "*:*", "defType", "dismax"), + reqWithPath("/elevate", "q.alt", "*:*", "defType", "dismax"), "//*[@numFound='0']"); } } finally { @@ -957,13 +1053,7 @@ public void testMarker() throws Exception { assertQ( "", - req( - CommonParams.Q, - "XXXX", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "XXXX", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='4']", @@ -974,26 +1064,14 @@ public void testMarker() throws Exception { assertQ( "", - req( - CommonParams.Q, - "AAAA", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "AAAA", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='7']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); assertQ( "", - req( - CommonParams.Q, - "AAAA", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elev]"), + reqWithPath("/elevate", CommonParams.Q, "AAAA", CommonParams.FL, "id, score, [elev]"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='7']", "not(//result/doc[1]/bool[@name='[elevated]'][.='false'])", @@ -1027,11 +1105,10 @@ public void testMarkExcludes() throws Exception { assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "XXXX XXXX", - CommonParams.QT, - "/elevate", QueryElevationParams.MARK_EXCLUDES, "true", "indent", @@ -1052,11 +1129,10 @@ public void testMarkExcludes() throws Exception { // thus, number 6 should not be returned, b/c it is excluded assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "XXXX XXXX", - CommonParams.QT, - "/elevate", QueryElevationParams.MARK_EXCLUDES, "false", CommonParams.FL, @@ -1075,11 +1151,10 @@ public void testMarkExcludes() throws Exception { // excluded results) assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "QQQQ", - CommonParams.QT, - "/elevate", QueryElevationParams.ENABLE, "false", "indent", @@ -1092,11 +1167,10 @@ public void testMarkExcludes() throws Exception { "//result/doc[3]/str[@name='id'][.='8']"); assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "QQQQ", - CommonParams.QT, - "/elevate", QueryElevationParams.MARK_EXCLUDES, "true", "indent", @@ -1132,7 +1206,6 @@ public void testSorting() throws Exception { final SolrParams baseParams = params( - "qt", "/elevate", "q", query, "fl", "id,score", "indent", "true"); @@ -1143,7 +1216,7 @@ public void testSorting() throws Exception { assertQ( "Make sure standard sort works as expected", - req(baseParams), + reqWithPath("/elevate", baseParams), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='c']", "//result/doc[2]/str[@name='id'][.='b']", @@ -1154,7 +1227,7 @@ public void testSorting() throws Exception { assertQ( "All six should make it", - req(baseParams), + reqWithPath("/elevate", baseParams), "//*[@numFound='6']", "//result/doc[1]/str[@name='id'][.='x']", "//result/doc[2]/str[@name='id'][.='y']", @@ -1166,7 +1239,7 @@ public void testSorting() throws Exception { // now switch the order: booster.setTopQueryResults(reader, query, false, new String[] {"a", "x"}, null); assertQ( - req(baseParams), + reqWithPath("/elevate", baseParams), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='a']", "//result/doc[2]/str[@name='id'][.='x']", @@ -1177,7 +1250,7 @@ public void testSorting() throws Exception { // default 'forceBoost' should be false assertFalse(booster.forceElevation); assertQ( - req(baseParams, "sort", "id asc"), + reqWithPath("/elevate", baseParams, "sort", "id asc"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='a']", "//result/doc[2]/str[@name='id'][.='b']", @@ -1186,7 +1259,13 @@ public void testSorting() throws Exception { assertQ( "useConfiguredElevatedOrder=false", - req(baseParams, "sort", "str_s1 asc,id desc", "useConfiguredElevatedOrder", "false"), + reqWithPath( + "/elevate", + baseParams, + "sort", + "str_s1 asc,id desc", + "useConfiguredElevatedOrder", + "false"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='x']", // group1 "//result/doc[2]/str[@name='id'][.='a']", // group1 @@ -1195,7 +1274,7 @@ public void testSorting() throws Exception { booster.forceElevation = true; assertQ( - req(baseParams, "sort", "id asc"), + reqWithPath("/elevate", baseParams, "sort", "id asc"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='a']", "//result/doc[2]/str[@name='id'][.='x']", @@ -1205,7 +1284,8 @@ public void testSorting() throws Exception { booster.forceElevation = true; assertQ( "useConfiguredElevatedOrder=false and forceElevation", - req(baseParams, "sort", "id desc", "useConfiguredElevatedOrder", "false"), + reqWithPath( + "/elevate", baseParams, "sort", "id desc", "useConfiguredElevatedOrder", "false"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='x']", // force elevated "//result/doc[2]/str[@name='id'][.='a']", // force elevated @@ -1215,7 +1295,7 @@ public void testSorting() throws Exception { // Test exclusive (not to be confused with exclusion) booster.setTopQueryResults(reader, query, false, new String[] {"x", "a"}, new String[] {}); assertQ( - req(baseParams, "exclusive", "true"), + reqWithPath("/elevate", baseParams, "exclusive", "true"), "//*[@numFound='2']", "//result/doc[1]/str[@name='id'][.='x']", "//result/doc[2]/str[@name='id'][.='a']"); @@ -1223,7 +1303,7 @@ public void testSorting() throws Exception { // Test exclusion booster.setTopQueryResults(reader, query, false, new String[] {"x"}, new String[] {"a"}); assertQ( - req(baseParams), + reqWithPath("/elevate", baseParams), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='x']", "//result/doc[2]/str[@name='id'][.='c']", @@ -1234,7 +1314,7 @@ public void testSorting() throws Exception { booster.clearElevationProviderCache(); assertQ( "All five should make it", - req(baseParams, "elevateIds", "x,y,z", "excludeIds", "b"), + reqWithPath("/elevate", baseParams, "elevateIds", "x,y,z", "excludeIds", "b"), "//*[@numFound='5']", "//result/doc[1]/str[@name='id'][.='x']", "//result/doc[2]/str[@name='id'][.='y']", @@ -1244,7 +1324,7 @@ public void testSorting() throws Exception { assertQ( "All four should make it", - req(baseParams, "elevateIds", "x,z,y", "excludeIds", "b,c"), + reqWithPath("/elevate", baseParams, "elevateIds", "x,z,y", "excludeIds", "b,c"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='x']", "//result/doc[2]/str[@name='id'][.='z']", @@ -1363,23 +1443,16 @@ public void testWithLocalParam() throws Exception { assertQ( "", - req( - CommonParams.Q, - "AAAA", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "AAAA", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='1']", "//result/doc[1]/str[@name='id'][.='7']", "//result/doc[1]/bool[@name='[elevated]'][.='true']"); assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "{!q.op=AND}AAAA", - CommonParams.QT, - "/elevate", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='1']", @@ -1387,11 +1460,10 @@ public void testWithLocalParam() throws Exception { "//result/doc[1]/bool[@name='[elevated]'][.='true']"); assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "{!q.op=AND v='AAAA'}", - CommonParams.QT, - "/elevate", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='1']", @@ -1425,13 +1497,7 @@ public void testQuerySubsetMatching() throws Exception { // Exact matching. assertQ( "", - req( - CommonParams.Q, - "XXXX", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath("/elevate", CommonParams.Q, "XXXX", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='4']", @@ -1443,25 +1509,15 @@ public void testQuerySubsetMatching() throws Exception { // Exact matching. assertQ( "", - req( - CommonParams.Q, - "QQQQ EE", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath( + "/elevate", CommonParams.Q, "QQQQ EE", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='0']"); // Subset matching. assertQ( "", - req( - CommonParams.Q, - "BB DD CC VV", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath( + "/elevate", CommonParams.Q, "BB DD CC VV", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='10']", "//result/doc[2]/str[@name='id'][.='12']", @@ -1475,13 +1531,8 @@ public void testQuerySubsetMatching() throws Exception { // Subset + exact matching. assertQ( "", - req( - CommonParams.Q, - "BB CC", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath( + "/elevate", CommonParams.Q, "BB CC", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='13']", "//result/doc[2]/str[@name='id'][.='10']", @@ -1495,11 +1546,10 @@ public void testQuerySubsetMatching() throws Exception { // Subset matching. assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "AA BB DD CC AA", - CommonParams.QT, - "/elevate", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='4']", @@ -1515,11 +1565,10 @@ public void testQuerySubsetMatching() throws Exception { // Subset matching. assertQ( "", - req( + reqWithPath( + "/elevate", CommonParams.Q, "AA RR BB DD AA", - CommonParams.QT, - "/elevate", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='3']", @@ -1533,13 +1582,8 @@ public void testQuerySubsetMatching() throws Exception { // Subset matching. assertQ( "", - req( - CommonParams.Q, - "AA BB EE", - CommonParams.QT, - "/elevate", - CommonParams.FL, - "id, score, [elevated]"), + reqWithPath( + "/elevate", CommonParams.Q, "AA BB EE", CommonParams.FL, "id, score, [elevated]"), "//*[@numFound='0']"); } finally { delete(); @@ -1598,11 +1642,14 @@ public void testOnlyDocsInSearchResultsWillBeElevated() throws Exception { // default behaviour assertQ( "", - req( - CommonParams.Q, "YYYY", - CommonParams.QT, "/elevate", - QueryElevationParams.ELEVATE_ONLY_DOCS_MATCHING_QUERY, "false", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "YYYY", + QueryElevationParams.ELEVATE_ONLY_DOCS_MATCHING_QUERY, + "false", + CommonParams.FL, + "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -1614,11 +1661,14 @@ public void testOnlyDocsInSearchResultsWillBeElevated() throws Exception { // only docs that matches q assertQ( "", - req( - CommonParams.Q, "YYYY", - CommonParams.QT, "/elevate", - QueryElevationParams.ELEVATE_ONLY_DOCS_MATCHING_QUERY, "true", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "YYYY", + QueryElevationParams.ELEVATE_ONLY_DOCS_MATCHING_QUERY, + "true", + CommonParams.FL, + "id, score, [elevated]"), "//*[@numFound='2']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[2]/str[@name='id'][.='5']", @@ -1644,12 +1694,16 @@ public void testOnlyRepresentativeIsVisibleWhenCollapsing() throws Exception { // default behaviour - all elevated docs are visible assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CollapsingQParserPlugin.COLLECT_ELEVATED_DOCS_WHEN_COLLAPSING, "true", - CommonParams.FQ, "{!collapse field=str_s1 sort='score desc'}", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CollapsingQParserPlugin.COLLECT_ELEVATED_DOCS_WHEN_COLLAPSING, + "true", + CommonParams.FQ, + "{!collapse field=str_s1 sort='score desc'}", + CommonParams.FL, + "id, score, [elevated]"), "//*[@numFound='4']", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -1663,12 +1717,16 @@ public void testOnlyRepresentativeIsVisibleWhenCollapsing() throws Exception { // only representative elevated doc visible assertQ( "", - req( - CommonParams.Q, "ZZZZ", - CommonParams.QT, "/elevate", - CollapsingQParserPlugin.COLLECT_ELEVATED_DOCS_WHEN_COLLAPSING, "false", - CommonParams.FQ, "{!collapse field=str_s1 sort='score desc'}", - CommonParams.FL, "id, score, [elevated]"), + reqWithPath( + "/elevate", + CommonParams.Q, + "ZZZZ", + CollapsingQParserPlugin.COLLECT_ELEVATED_DOCS_WHEN_COLLAPSING, + "false", + CommonParams.FQ, + "{!collapse field=str_s1 sort='score desc'}", + CommonParams.FL, + "id, score, [elevated]"), "//*[@numFound='3']", "//result/doc[1]/str[@name='id'][.='2']", "//result/doc[2]/str[@name='id'][.='3']", @@ -1698,7 +1756,6 @@ public void testCursor() throws Exception { final SolrParams baseParams = params( - "qt", "/elevate", "q", "title:ipod", "sort", "score desc, id asc", "fl", "id", @@ -1707,13 +1764,13 @@ public void testCursor() throws Exception { // sanity check everything returned w/these elevation options... assertJQ( - req(baseParams), + reqWithPath("/elevate", baseParams), "/response/numFound==5", "/response/start==0", "/response/docs==[{'id':'x'},{'id':'y'},{'id':'z'},{'id':'c'},{'id':'a'}]"); // same query using CURSOR_MARK_START should produce a 'next' cursor... assertCursorJQ( - req(baseParams, CURSOR_MARK_PARAM, CURSOR_MARK_START), + reqWithPath("/elevate", baseParams, CURSOR_MARK_PARAM, CURSOR_MARK_START), "/response/numFound==5", "/response/start==0", "/response/docs==[{'id':'x'},{'id':'y'},{'id':'z'},{'id':'c'},{'id':'a'}]"); @@ -1722,26 +1779,27 @@ public void testCursor() throws Exception { String nextCursor = null; nextCursor = assertCursorJQ( - req(baseParams, CURSOR_MARK_PARAM, CURSOR_MARK_START, "rows", "2"), + reqWithPath( + "/elevate", baseParams, CURSOR_MARK_PARAM, CURSOR_MARK_START, "rows", "2"), "/response/numFound==5", "/response/start==0", "/response/docs==[{'id':'x'},{'id':'y'}]"); nextCursor = assertCursorJQ( - req(baseParams, CURSOR_MARK_PARAM, nextCursor, "rows", "2"), + reqWithPath("/elevate", baseParams, CURSOR_MARK_PARAM, nextCursor, "rows", "2"), "/response/numFound==5", "/response/start==0", "/response/docs==[{'id':'z'},{'id':'c'}]"); nextCursor = assertCursorJQ( - req(baseParams, CURSOR_MARK_PARAM, nextCursor, "rows", "2"), + reqWithPath("/elevate", baseParams, CURSOR_MARK_PARAM, nextCursor, "rows", "2"), "/response/numFound==5", "/response/start==0", "/response/docs==[{'id':'a'}]"); final String lastCursor = nextCursor; nextCursor = assertCursorJQ( - req(baseParams, CURSOR_MARK_PARAM, nextCursor, "rows", "2"), + reqWithPath("/elevate", baseParams, CURSOR_MARK_PARAM, nextCursor, "rows", "2"), "/response/numFound==5", "/response/start==0", "/response/docs==[]"); diff --git a/solr/core/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java index 670a4d8aef2..32470b57ce2 100644 --- a/solr/core/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java +++ b/solr/core/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java @@ -227,11 +227,10 @@ public void testCanned() throws Exception { private void doBasics() throws Exception { assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, @@ -246,11 +245,10 @@ private void doBasics() throws Exception { + " 'test_postv':{'anoth':{'tf':1},'titl':{'tf':2}}}}"); // tv.fl diff from fl assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", "fl", @@ -266,11 +264,10 @@ private void doBasics() throws Exception { + " 'test_offtv':{'anoth':{'tf':1},'titl':{'tf':2}}}}"); // multi-valued tv.fl assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", "fl", @@ -288,11 +285,10 @@ private void doBasics() throws Exception { + " 'test_offtv':{'anoth':{'tf':1},'titl':{'tf':2}}}}"); // re-use fl glob assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", "fl", @@ -309,11 +305,10 @@ private void doBasics() throws Exception { + " 'test_postv':{'anoth':{'tf':1},'titl':{'tf':2}}}}"); // re-use fl, ignore things we can't handle assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", "fl", @@ -327,11 +322,10 @@ private void doBasics() throws Exception { + " 'test_postv':{'anoth':{'tf':1},'titl':{'tf':2}}}}"); // re-use (multi-valued) fl, ignore things we can't handle assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", "fl", @@ -349,11 +343,10 @@ private void doBasics() throws Exception { private void doOptions() throws Exception { assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, @@ -371,11 +364,10 @@ private void doOptions() throws Exception { "/termVectors/0/test_posofftv/anoth=={'tf':1, 'offsets':{'start':20, 'end':27}, 'positions':{'position':5}, 'df':2, 'tf-idf':0.5}"); assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, @@ -387,8 +379,7 @@ private void doOptions() throws Exception { // test each combination at random final List list = new ArrayList<>(); list.addAll( - Arrays.asList( - "json.nl", "map", "qt", tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, "true")); + Arrays.asList("json.nl", "map", "q", "id:0", TermVectorComponent.COMPONENT_NAME, "true")); String[][] options = new String[][] { {TermVectorParams.TF, "'tf':1"}, @@ -413,16 +404,15 @@ private void doOptions() throws Exception { } expected.append("}"); - assertJQ(req(list.toArray(new String[0])), expected.toString()); + assertJQ(reqWithPath(tv, list.toArray(new String[0])), expected.toString()); } private void doPerField() throws Exception { assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, @@ -462,11 +452,10 @@ private void doPayloads() throws Exception { // stuffs start (20) and end offset (27) into the // payload: assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, @@ -498,11 +487,10 @@ public void testNoVectors() throws Exception { // Kind of an odd test, but we just want to know if we don't generate an NPE when there is // nothing to give back in the term vectors. assertJQ( - req( + reqWithPath( + tv, "json.nl", "map", - "qt", - tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, diff --git a/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java index 2870fb222bb..d939c5b3764 100644 --- a/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java +++ b/solr/core/src/test/org/apache/solr/handler/component/TermsComponentTest.java @@ -84,7 +84,7 @@ public void createIndex() { @Test public void testEmptyLower() { assertQ( - req("indent", "true", "qt", "/terms", "terms.fl", "lowerfilt", "terms.upper", "b"), + reqWithPath("/terms", "indent", "true", "terms.fl", "lowerfilt", "terms.upper", "b"), "count(//lst[@name='lowerfilt']/*)=6", "//int[@name='a'] ", "//int[@name='aa'] ", @@ -97,11 +97,10 @@ public void testEmptyLower() { @Test public void testMultipleFields() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.upper", @@ -115,15 +114,15 @@ public void testMultipleFields() { @Test public void testUnlimitedRows() { assertQ( - req("indent", "true", "qt", "/terms", "terms.fl", "lowerfilt", "terms.fl", "standardfilt"), + reqWithPath( + "/terms", "indent", "true", "terms.fl", "lowerfilt", "terms.fl", "standardfilt"), "count(//lst[@name='lowerfilt']/*)=9", "count(//lst[@name='standardfilt']/*)=10"); assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.fl", @@ -137,11 +136,10 @@ public void testUnlimitedRows() { @Test public void testPrefix() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.upper", @@ -165,11 +163,10 @@ public void testPrefix() { @Test public void testRegexp() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.lower", @@ -219,11 +216,10 @@ public void testRegexpFlagParsing() { public void testRegexpWithFlags() { // TODO: there are no uppercase or mixed-case terms in the index! assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.lower", @@ -244,11 +240,10 @@ public void testRegexpWithFlags() { @Test public void testSortCount() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.lower", @@ -269,11 +264,10 @@ public void testSortCount() { public void testTermsList() { // Terms list always returns in index order assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.list", @@ -287,7 +281,7 @@ public void testTermsList() { // Test with numeric terms assertQ( - req("indent", "true", "qt", "/terms", "terms.fl", "foo_i", "terms.list", "2,1"), + reqWithPath("/terms", "indent", "true", "terms.fl", "foo_i", "terms.list", "2,1"), "count(//lst[@name='foo_i']/*)=2", "//lst[@name='foo_i']/int[1][@name='1'][.='2']", "//lst[@name='foo_i']/int[2][@name='2'][.='1']"); @@ -297,11 +291,10 @@ public void testTermsList() { public void testStats() { // Terms list always returns in index order assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.stats", @@ -314,11 +307,10 @@ public void testStats() { @Test public void testSortIndex() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.lower", @@ -338,11 +330,10 @@ public void testSortIndex() { @Test public void testPastUpper() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", // no upper bound, lower bound doesn't exist @@ -354,11 +345,10 @@ public void testPastUpper() { @Test public void testLowerExclusive() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.lower", @@ -375,11 +365,10 @@ public void testLowerExclusive() { "//int[@name='abc'] "); assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.lower", @@ -394,11 +383,10 @@ public void testLowerExclusive() { @Test public void test() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.lower", @@ -414,11 +402,10 @@ public void test() { "//int[@name='abc'] "); assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.lower", @@ -426,36 +413,36 @@ public void test() { "terms.upper", "b", "terms.raw", - "true", // this should have no effect on a text field + "true", + // this should have no effect on a text field "terms.limit", "2"), "count(//lst[@name='lowerfilt']/*)=2", "//int[@name='a']", "//int[@name='aa']"); - assertQ(req("indent", "true", "qt", "/terms", "terms.fl", "foo_i"), "//int[@name='1'][.='2']"); + assertQ( + reqWithPath("/terms", "indent", "true", "terms.fl", "foo_i"), "//int[@name='1'][.='2']"); /* terms.raw only applies to indexed fields assertQ(req("indent","true", "qt","/terms", "terms.fl","foo_i", "terms.raw","true") - ,"not(//int[@name='1'][.='2'])" - ); + ,"not(//int[@name='1'][.='2'])"); */ // check something at the end of the index assertQ( - req("indent", "true", "qt", "/terms", "terms.fl", "zzz_i"), + reqWithPath("/terms", "indent", "true", "terms.fl", "zzz_i"), "count(//lst[@name='zzz_i']/*)=0"); } @Test public void testMinMaxFreq() { assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "lowerfilt", "terms.lower", @@ -469,11 +456,10 @@ public void testMinMaxFreq() { "count(//lst[@name='lowerfilt']/*)=1"); assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "standardfilt", "terms.lower", @@ -490,24 +476,15 @@ public void testMinMaxFreq() { @Test public void testTermsWithJSON() throws Exception { ModifiableSolrParams params = - params( - "qt", - "/terms", - "terms.fl", - "standardfilt", - "terms.lower", - "a", - "terms.sort", - "index", - "wt", - "json"); + params("terms.fl", "standardfilt", "terms.lower", "a", "terms.sort", "index", "wt", "json"); - assertJQ(req(params), "/terms/standardfilt/[0]==a", "/terms/standardfilt/[1]==1"); + assertJQ( + reqWithPath("/terms", params), "/terms/standardfilt/[0]==a", "/terms/standardfilt/[1]==1"); // enable terms.ttf params.set("terms.ttf", "true"); assertJQ( - req(params), + reqWithPath("/terms", params), "/terms/standardfilt/[0]==a", "/terms/standardfilt/[1]/df==1", "/terms/standardfilt/[1]/ttf==1"); @@ -516,7 +493,7 @@ public void testTermsWithJSON() throws Exception { params.set("terms.list", "spider,snake,shark"); params.remove("terms.ttf"); assertJQ( - req(params), + reqWithPath("/terms", params), "/terms/standardfilt/[0]==shark", "/terms/standardfilt/[1]==2", "/terms/standardfilt/[2]==snake", @@ -526,7 +503,7 @@ public void testTermsWithJSON() throws Exception { // with terms.list and terms.ttf=true params.set("terms.ttf", "true"); assertJQ( - req(params), + reqWithPath("/terms", params), "/terms/standardfilt/[0]==shark", "/terms/standardfilt/[1]/df==2", "/terms/standardfilt/[1]/ttf==2", @@ -541,12 +518,16 @@ public void testTermsWithJSON() throws Exception { @Test public void testDocFreqAndTotalTermFreq() { SolrQueryRequest req = - req( - "indent", "true", - "qt", "/terms", - "terms.fl", "standardfilt", - "terms.ttf", "true", - "terms.list", "snake,spider,shark,ddddd"); + reqWithPath( + "/terms", + "indent", + "true", + "terms.fl", + "standardfilt", + "terms.ttf", + "true", + "terms.list", + "snake,spider,shark,ddddd"); assertQ( req, "count(//lst[@name='standardfilt']/*)=4", @@ -561,13 +542,18 @@ public void testDocFreqAndTotalTermFreq() { // terms.limit=-1 and terms.sort=count and NO terms.list req = - req( - "indent", "true", - "qt", "/terms", - "terms.fl", "standardfilt", - "terms.ttf", "true", - "terms.limit", "-1", - "terms.sort", "count"); + reqWithPath( + "/terms", + "indent", + "true", + "terms.fl", + "standardfilt", + "terms.ttf", + "true", + "terms.limit", + "-1", + "terms.sort", + "count"); assertQ( req, "count(//lst[@name='standardfilt']/*)>=4", // it would be at-least 4 @@ -584,12 +570,16 @@ public void testDocFreqAndTotalTermFreq() { @Test public void testDocFreqAndTotalTermFreqForNonExistingTerm() { SolrQueryRequest req = - req( - "indent", "true", - "qt", "/terms", - "terms.fl", "standardfilt", - "terms.ttf", "true", - "terms.list", "boo,snake"); + reqWithPath( + "/terms", + "indent", + "true", + "terms.fl", + "standardfilt", + "terms.ttf", + "true", + "terms.list", + "boo,snake"); assertQ( req, "count(//lst[@name='standardfilt']/*)=1", @@ -600,13 +590,18 @@ public void testDocFreqAndTotalTermFreqForNonExistingTerm() { @Test public void testDocFreqAndTotalTermFreqForMultipleFields() { SolrQueryRequest req = - req( - "indent", "true", - "qt", "/terms", - "terms.fl", "lowerfilt", - "terms.fl", "standardfilt", - "terms.ttf", "true", - "terms.list", "a,aa,aaa"); + reqWithPath( + "/terms", + "indent", + "true", + "terms.fl", + "lowerfilt", + "terms.fl", + "standardfilt", + "terms.ttf", + "true", + "terms.list", + "a,aa,aaa"); assertQ( req, "count(//lst[@name='lowerfilt']/*)=3", @@ -626,14 +621,20 @@ public void testDocFreqAndTotalTermFreqForMultipleFields() { // terms.ttf=true, terms.sort=index and no terms list req = - req( - "indent", "true", - "qt", "/terms", - "terms.fl", "lowerfilt", - "terms.fl", "standardfilt", - "terms.ttf", "true", - "terms.sort", "index", - "terms.limit", "10"); + reqWithPath( + "/terms", + "indent", + "true", + "terms.fl", + "lowerfilt", + "terms.fl", + "standardfilt", + "terms.ttf", + "true", + "terms.sort", + "index", + "terms.limit", + "10"); assertQ( req, "count(//lst[@name='lowerfilt']/*)<=10", @@ -689,10 +690,7 @@ public void testPointField() throws Exception { val2 = vals[i]; } - SolrQueryRequest req = - req( - "qt", "/terms", - "terms.fl", "foo_pi"); + SolrQueryRequest req = req("terms.fl", "foo_pi"); ; try { /* SchemaField sf = req.getSchema().getField("foo_pi"); @@ -777,11 +775,10 @@ public void testPointField() throws Exception { assertEquals(i, nvals); assertQ( - req( + reqWithPath( + "/terms", "indent", "true", - "qt", - "/terms", "terms.fl", "foo_pi", "terms.sort", @@ -834,7 +831,7 @@ public void testDatePointField() { assertU(commit()); assertQ( - req("indent", "true", "qt", "/terms", "terms.fl", "foo_pdt", "terms.sort", "count"), + reqWithPath("/terms", "indent", "true", "terms.fl", "foo_pdt", "terms.sort", "count"), "count(//lst[@name='foo_pdt']/*)=2", "//lst[@name='foo_pdt']/int[1][@name='" + dates[1] + "'][.='51']", "//lst[@name='foo_pdt']/int[2][@name='" + dates[0] + "'][.='50']"); @@ -844,7 +841,7 @@ public void testDatePointField() { assertU(commit()); assertQ( - req("indent", "true", "qt", "/terms", "terms.fl", "foo_pdt", "terms.sort", "count"), + reqWithPath("/terms", "indent", "true", "terms.fl", "foo_pdt", "terms.sort", "count"), "count(//lst[@name='foo_pdt']/*)=0"); } } diff --git a/solr/core/src/test/org/apache/solr/handler/component/TestMatchedQueriesComponent.java b/solr/core/src/test/org/apache/solr/handler/component/TestMatchedQueriesComponent.java index a0a4b891742..c6954400fc2 100644 --- a/solr/core/src/test/org/apache/solr/handler/component/TestMatchedQueriesComponent.java +++ b/solr/core/src/test/org/apache/solr/handler/component/TestMatchedQueriesComponent.java @@ -47,7 +47,7 @@ public static void beforeClass() throws Exception { @Test public void testNotEnabledByDefault() throws Exception { assertJQ( - req("qt", HANDLER, "q", "{!term name=fantasy_cat f=cat_s}fantasy", "sort", "id asc"), + reqWithPath(HANDLER, "q", "{!term name=fantasy_cat f=cat_s}fantasy", "sort", "id asc"), "!/matched_queries_per_hit==null", "!/matched_queries_summary==null"); } @@ -56,12 +56,16 @@ public void testNotEnabledByDefault() throws Exception { @Test public void testSingleNamedTermQuery() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!term name=fantasy_cat f=cat_s}fantasy", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!term name=fantasy_cat f=cat_s}fantasy", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", "/matched_queries_per_hit/1/[0]=='fantasy_cat'", "/matched_queries_per_hit/2/[0]=='fantasy_cat'", @@ -75,12 +79,16 @@ public void testSingleNamedTermQuery() throws Exception { @Test public void testShortParamAlias() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!term name=fantasy_cat f=cat_s}fantasy", - "mq", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!term name=fantasy_cat f=cat_s}fantasy", + "mq", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", "/matched_queries_summary/fantasy_cat/[0]=='1'"); } @@ -92,13 +100,16 @@ public void testShortParamAlias() throws Exception { @Test public void testTwoNamedQueriesOr() throws Exception { assertJQ( - req( - "qt", HANDLER, + reqWithPath( + HANDLER, "q", - "({!term name=fantasy_cat f=cat_s}fantasy) OR ({!term name=scifi_cat f=cat_s}scifi)", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + "({!term name=fantasy_cat f=cat_s}fantasy) OR ({!term name=scifi_cat f=cat_s}scifi)", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==7", "/matched_queries_per_hit/1/[0]=='fantasy_cat'", "/matched_queries_per_hit/5/[0]=='scifi_cat'", @@ -110,12 +121,16 @@ public void testTwoNamedQueriesOr() throws Exception { @Test public void testUnnamedQueryProducesNoOutput() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!term f=cat_s}fantasy", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!term f=cat_s}fantasy", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", "!/matched_queries_per_hit==null", "!/matched_queries_summary==null"); @@ -126,13 +141,16 @@ public void testUnnamedQueryProducesNoOutput() throws Exception { public void testMultiValuedFieldBothNamesPresent() throws Exception { // docs 2 and 3 match both fantasy_cat and childrens_cat assertJQ( - req( - "qt", HANDLER, + reqWithPath( + HANDLER, "q", - "({!term name=fantasy_cat f=cat_s}fantasy) OR ({!term name=childrens_cat f=cat_s}childrens)", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + "({!term name=fantasy_cat f=cat_s}fantasy) OR ({!term name=childrens_cat f=cat_s}childrens)", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", "/matched_queries_summary/fantasy_cat/[3]=='4'", "/matched_queries_summary/childrens_cat/[0]=='2'", @@ -146,12 +164,16 @@ public void testMultiValuedFieldBothNamesPresent() throws Exception { @Test public void testTermsNamedQuery() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!terms name=genre_all f=cat_s}fantasy,scifi", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!terms name=genre_all f=cat_s}fantasy,scifi", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==7", "/matched_queries_per_hit/1/[0]=='genre_all'", "/matched_queries_per_hit/5/[0]=='genre_all'", @@ -167,15 +189,18 @@ public void testTermsNamedQuery() throws Exception { @Test public void testBoolOuterAndInnerNamesComposed() throws Exception { assertJQ( - req( - "qt", HANDLER, + reqWithPath( + HANDLER, "q", - "{!bool name=all_books" - + " should='{!term name=fantasy_cat f=cat_s}fantasy'" - + " should='{!term name=scifi_cat f=cat_s}scifi'}", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + "{!bool name=all_books" + + " should='{!term name=fantasy_cat f=cat_s}fantasy'" + + " should='{!term name=scifi_cat f=cat_s}scifi'}", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==7", // every doc carries all_books (outer name) "/matched_queries_summary/all_books/[6]=='7'", @@ -198,14 +223,17 @@ public void testBoolOuterAndInnerNamesComposed() throws Exception { @Test public void testBoolMultipleShouldNamedTerms() throws Exception { assertJQ( - req( - "qt", HANDLER, + reqWithPath( + HANDLER, "q", - "{!bool should='{!term name=fantasy_cat f=cat_s}fantasy'" - + " should='{!term name=scifi_cat f=cat_s}scifi'}", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + "{!bool should='{!term name=fantasy_cat f=cat_s}fantasy'" + + " should='{!term name=scifi_cat f=cat_s}scifi'}", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==7", "/matched_queries_per_hit/1/[0]=='fantasy_cat'", "/matched_queries_per_hit/4/[0]=='fantasy_cat'", @@ -225,14 +253,17 @@ public void testBoolMultipleShouldNamedTerms() throws Exception { public void testBoolMustWithNamedShould() throws Exception { // MUST: all 4 fantasy docs; named SHOULD: only docs 2 and 3 (childrens) assertJQ( - req( - "qt", HANDLER, + reqWithPath( + HANDLER, "q", - "{!bool must='{!term f=cat_s}fantasy'" - + " should='{!term name=childrens_cat f=cat_s}childrens'}", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + "{!bool must='{!term f=cat_s}fantasy'" + + " should='{!term name=childrens_cat f=cat_s}childrens'}", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", // docs 2 and 3 matched the named SHOULD "/matched_queries_per_hit/2/[0]=='childrens_cat'", @@ -251,12 +282,16 @@ public void testBoolMustWithNamedShould() throws Exception { @Test public void testPrefixNamedQuery() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!prefix name=fanta_prefix f=cat_s}fanta", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!prefix name=fanta_prefix f=cat_s}fanta", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", "/matched_queries_summary/fanta_prefix/[3]=='4'", "/matched_queries_per_hit/1/[0]=='fanta_prefix'", @@ -269,12 +304,16 @@ public void testPrefixNamedQuery() throws Exception { @Test public void testEdismaxNamedQuery() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!edismax name=fantasy_edismax qf=cat_s}fantasy", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!edismax name=fantasy_edismax qf=cat_s}fantasy", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==4", "/matched_queries_summary/fantasy_edismax/[3]=='4'", "/matched_queries_per_hit/1/[0]=='fantasy_edismax'", @@ -287,12 +326,16 @@ public void testEdismaxNamedQuery() throws Exception { @Test public void testLuceneNamedQuery() throws Exception { assertJQ( - req( - "qt", HANDLER, - "q", "{!lucene name=scifi_lucene df=cat_s}scifi", - "matched_queries", "true", - "sort", "id asc", - "rows", "10"), + reqWithPath( + HANDLER, + "q", + "{!lucene name=scifi_lucene df=cat_s}scifi", + "matched_queries", + "true", + "sort", + "id asc", + "rows", + "10"), "/response/numFound==3", "/matched_queries_summary/scifi_lucene/[2]=='7'", "/matched_queries_per_hit/5/[0]=='scifi_lucene'", diff --git a/solr/core/src/test/org/apache/solr/search/TestBlockCollapse.java b/solr/core/src/test/org/apache/solr/search/TestBlockCollapse.java index c6175d24dd7..92a5d523b7e 100644 --- a/solr/core/src/test/org/apache/solr/search/TestBlockCollapse.java +++ b/solr/core/src/test/org/apache/solr/search/TestBlockCollapse.java @@ -62,7 +62,7 @@ public void testPostFilterIntrospection() throws Exception { Arrays.asList( params(), // QEC boosting shouldn't impact what impl we get in any situation - params("qt", "/elevate", "elevateIds", "42"))) { + params("elevateIds", "42"))) { try (SolrQueryRequest req = req()) { // non-block based collapse situations, regardless of nullPolicy... @@ -347,12 +347,16 @@ public void testSimple() { // same query, but boosting a diff p1 sku to change group head (and result order) assertQ( - req( - "q", q, - "qt", "/elevate", - "elevateIds", "p1s1", - "fq", "{!collapse " + opt + nullPolicy + "}", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + q, + "elevateIds", + "p1s1", + "fq", + "{!collapse " + opt + nullPolicy + "}", + "sort", + "score desc, num_i asc"), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='p1s1']", "//result/doc[2]/str[@name='id'][.='p2s4']", @@ -360,12 +364,16 @@ public void testSimple() { // same query, but boosting multiple skus from p1 assertQ( - req( - "q", q, - "qt", "/elevate", - "elevateIds", "p1s1,p1s2", - "fq", "{!collapse " + opt + nullPolicy + "}", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + q, + "elevateIds", + "p1s1,p1s2", + "fq", + "{!collapse " + opt + nullPolicy + "}", + "sort", + "score desc, num_i asc"), "*[count(//doc)=4]", "//result/doc[1]/str[@name='id'][.='p1s1']", "//result/doc[2]/str[@name='id'][.='p1s2']", @@ -386,26 +394,36 @@ public void testSimple() { "//result/doc[3][str[@name='id'][.='p2s3'] and float[@name='score'][.=141.0]]"); // same query, but boosting a diff child to change group head (and result order) assertQ( - req( - "q", "{!func}sum(42, num_i)", - "qt", "/elevate", - "elevateIds", "p1s1", - "fq", "{!collapse " + opt + nullPolicy + "}", - "fl", "score,id", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "{!func}sum(42, num_i)", + "elevateIds", + "p1s1", + "fq", + "{!collapse " + opt + nullPolicy + "}", + "fl", + "score,id", + "sort", + "score desc, num_i asc"), "*[count(//doc)=3]", "//result/doc[1][str[@name='id'][.='p1s1'] and float[@name='score'][.=84.0]]", "//result/doc[2][str[@name='id'][.='p3s3'] and float[@name='score'][.=1276.0]]", "//result/doc[3][str[@name='id'][.='p2s3'] and float[@name='score'][.=141.0]]"); // same query, but boosting multiple skus from p1 assertQ( - req( - "q", "{!func}sum(42, num_i)", - "qt", "/elevate", - "elevateIds", "p1s2,p1s1", - "fq", "{!collapse " + opt + nullPolicy + "}", - "fl", "score,id", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "{!func}sum(42, num_i)", + "elevateIds", + "p1s2,p1s1", + "fq", + "{!collapse " + opt + nullPolicy + "}", + "fl", + "score,id", + "sort", + "score desc, num_i asc"), "*[count(//doc)=4]", "//result/doc[1][str[@name='id'][.='p1s2'] and float[@name='score'][.=52.0]]", "//result/doc[2][str[@name='id'][.='p1s1'] and float[@name='score'][.=84.0]]", @@ -467,24 +485,32 @@ public void testSimple() { "//result/doc[3]/str[@name='id'][.='p2s2']"); // same query, but boosting skus to change group head (and result order) assertQ( - req( - "q", "txt_t:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p2s3,p1s1", - "fq", "{!collapse " + opt + selector + nullPolicy + "}", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "txt_t:* txt_t:XX", + "elevateIds", + "p2s3,p1s1", + "fq", + "{!collapse " + opt + selector + nullPolicy + "}", + "sort", + "score desc, num_i asc"), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='p2s3']", "//result/doc[2]/str[@name='id'][.='p1s1']", "//result/doc[3]/str[@name='id'][.='p3s4']"); // same query, but boosting multiple skus from p1 assertQ( - req( - "q", "txt_t:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p2s3,p1s4,p1s3", - "fq", "{!collapse " + opt + selector + nullPolicy + "}", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "txt_t:* txt_t:XX", + "elevateIds", + "p2s3,p1s4,p1s3", + "fq", + "{!collapse " + opt + selector + nullPolicy + "}", + "sort", + "score desc, num_i asc"), "*[count(//doc)=4]", "//result/doc[1]/str[@name='id'][.='p2s3']", "//result/doc[2]/str[@name='id'][.='p1s4']", @@ -525,13 +551,18 @@ public void testSimple() { "//result/doc[3][str[@name='id'][.='p3s3'] and float[@name='score'][.=1276.0]]"); // same query, but boosting multiple skus from p1 assertQ( - req( - "q", "{!func}sum(42, num_i)", - "qt", "/elevate", - "elevateIds", "p1s2,p1s1", - "fq", "{!collapse " + opt + selector + nullPolicy + "}", - "fl", "score,id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "{!func}sum(42, num_i)", + "elevateIds", + "p1s2,p1s1", + "fq", + "{!collapse " + opt + selector + nullPolicy + "}", + "fl", + "score,id", + "sort", + "num_i asc"), "*[count(//doc)=4]", "//result/doc[1][str[@name='id'][.='p1s2'] and float[@name='score'][.=52.0]]", "//result/doc[2][str[@name='id'][.='p1s1'] and float[@name='score'][.=84.0]]", @@ -565,13 +596,18 @@ public void testSimple() { // NOTE: this causes each boosted doc to be returned, but top level sort is not score, // so QEC doesn't hijack order assertQ( - req( - "q", "*:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p3s3,p3s2", - "fq", "{!collapse " + opt + selector + nullPolicy + "}", - "fl", "id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "*:* txt_t:XX", + "elevateIds", + "p3s3,p3s2", + "fq", + "{!collapse " + opt + selector + nullPolicy + "}", + "fl", + "id", + "sort", + "num_i asc"), "*[count(//doc)=4]", "//result/doc[1][str[@name='id'][.='p2s4']]", // 13 // 100 (boosted so treated as own group) @@ -581,14 +617,20 @@ public void testSimple() { "//result/doc[4][str[@name='id'][.='p3s3']]"); // same query, w/forceElevation to change top level order assertQ( - req( - "q", "*:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p3s3,p3s2", - "forceElevation", "true", - "fq", "{!collapse " + opt + selector + nullPolicy + "}", - "fl", "id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "*:* txt_t:XX", + "elevateIds", + "p3s3,p3s2", + "forceElevation", + "true", + "fq", + "{!collapse " + opt + selector + nullPolicy + "}", + "fl", + "id", + "sort", + "num_i asc"), "*[count(//doc)=4]", // 1234 (boosted so treated as own group) "//result/doc[1][str[@name='id'][.='p3s3']]", @@ -654,12 +696,16 @@ public void testNullPolicyExpand() { "//result/doc[7]/str[@name='id'][.='z100']"); // same query, but boosting docs to change group heads (and result order) assertQ( - req( - "q", "*:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "z2,p3s3", - "fq", "{!collapse " + opt + " nullPolicy=expand}", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "*:* txt_t:XX", + "elevateIds", + "z2,p3s3", + "fq", + "{!collapse " + opt + " nullPolicy=expand}", + "sort", + "score desc, num_i asc"), "*[count(//doc)=7]", "//result/doc[1]/str[@name='id'][.='z2']", "//result/doc[2]/str[@name='id'][.='p3s3']", @@ -686,13 +732,18 @@ public void testNullPolicyExpand() { "//result/doc[7][str[@name='id'][.='z1'] and float[@name='score'][.=43.0]]"); // same query, but boosting docs to change group heads (and result order) assertQ( - req( - "q", "{!func}sum(42, num_i)", - "qt", "/elevate", - "elevateIds", "p2s4,z2,p2s1", - "fq", "{!collapse " + opt + " nullPolicy=expand}", - "fl", "score,id", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "{!func}sum(42, num_i)", + "elevateIds", + "p2s4,z2,p2s1", + "fq", + "{!collapse " + opt + " nullPolicy=expand}", + "fl", + "score,id", + "sort", + "score desc, num_i asc"), "*[count(//doc)=8]", "//result/doc[1][str[@name='id'][.='p2s4'] and float[@name='score'][.=55.0]]", "//result/doc[2][str[@name='id'][.='z2'] and float[@name='score'][.=44.0]]", @@ -758,12 +809,16 @@ public void testNullPolicyExpand() { // NOTE: this causes each boosted doc to be returned, but top level sort is not score, so // QEC doesn't hijack order assertQ( - req( - "q", "num_i:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p3s3,z3,p3s1", - "fq", "{!collapse " + opt + selector + " nullPolicy=expand}", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "num_i:* txt_t:XX", + "elevateIds", + "p3s3,z3,p3s1", + "fq", + "{!collapse " + opt + selector + " nullPolicy=expand}", + "sort", + "num_i asc"), "*[count(//doc)=8]", "//result/doc[1]/str[@name='id'][.='z1']", "//result/doc[2]/str[@name='id'][.='z2']", @@ -775,13 +830,18 @@ public void testNullPolicyExpand() { "//result/doc[8]/str[@name='id'][.='p3s3']"); // same query, w/forceElevation to change top level order assertQ( - req( - "q", "num_i:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p3s3,z3,p3s1", - "forceElevation", "true", - "fq", "{!collapse " + opt + selector + " nullPolicy=expand}", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "num_i:* txt_t:XX", + "elevateIds", + "p3s3,z3,p3s1", + "forceElevation", + "true", + "fq", + "{!collapse " + opt + selector + " nullPolicy=expand}", + "sort", + "num_i asc"), "*[count(//doc)=8]", "//result/doc[1]/str[@name='id'][.='p3s3']", "//result/doc[2]/str[@name='id'][.='z3']", @@ -832,13 +892,18 @@ public void testNullPolicyExpand() { // NOTE: this causes each boosted doc to be returned, but top level sort is not score, so // QEC doesn't hijack order assertQ( - req( - "q", "{!func}sum(42, num_i)", - "qt", "/elevate", - "elevateIds", "p3s1,z3,p3s4", - "fq", "{!collapse " + opt + selector + " nullPolicy=expand}", - "fl", "score,id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "{!func}sum(42, num_i)", + "elevateIds", + "p3s1,z3,p3s4", + "fq", + "{!collapse " + opt + selector + " nullPolicy=expand}", + "fl", + "score,id", + "sort", + "num_i asc"), "*[count(//doc)=8]", "//result/doc[1][str[@name='id'][.='z1'] and float[@name='score'][.=43.0]]", "//result/doc[2][str[@name='id'][.='z2'] and float[@name='score'][.=44.0]]", @@ -850,14 +915,20 @@ public void testNullPolicyExpand() { "//result/doc[8][str[@name='id'][.='p1s3'] and float[@name='score'][.=819.0]]"); // same query, w/forceElevation to change top level order assertQ( - req( - "q", "{!func}sum(42, num_i)", - "qt", "/elevate", - "elevateIds", "p3s1,z3,p3s4", - "forceElevation", "true", - "fq", "{!collapse " + opt + selector + " nullPolicy=expand}", - "fl", "score,id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "{!func}sum(42, num_i)", + "elevateIds", + "p3s1,z3,p3s4", + "forceElevation", + "true", + "fq", + "{!collapse " + opt + selector + " nullPolicy=expand}", + "fl", + "score,id", + "sort", + "num_i asc"), "*[count(//doc)=8]", "//result/doc[1][str[@name='id'][.='p3s1'] and float[@name='score'][.=57.0]]", "//result/doc[2][str[@name='id'][.='z3'] and float[@name='score'][.=45.0]]", @@ -901,13 +972,18 @@ public void testNullPolicyExpand() { // NOTE: this causes each boosted doc to be returned, but top level sort is not score, so // QEC doesn't hijack order assertQ( - req( - "q", "*:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p3s3,z3,p3s4", - "fq", "{!collapse " + opt + selector + " nullPolicy=expand}", - "fl", "id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "*:* txt_t:XX", + "elevateIds", + "p3s3,z3,p3s4", + "fq", + "{!collapse " + opt + selector + " nullPolicy=expand}", + "fl", + "id", + "sort", + "num_i asc"), "*[count(//doc)=8]", "//result/doc[1][str[@name='id'][.='z1']]", "//result/doc[2][str[@name='id'][.='z2']]", @@ -920,14 +996,20 @@ public void testNullPolicyExpand() { ); // same query, w/forceElevation to change top level order assertQ( - req( - "q", "*:* txt_t:XX", - "qt", "/elevate", - "elevateIds", "p3s3,z3,p3s4", - "forceElevation", "true", - "fq", "{!collapse " + opt + selector + " nullPolicy=expand}", - "fl", "id", - "sort", "num_i asc"), + reqWithPath( + "/elevate", + "q", + "*:* txt_t:XX", + "elevateIds", + "p3s3,z3,p3s4", + "forceElevation", + "true", + "fq", + "{!collapse " + opt + selector + " nullPolicy=expand}", + "fl", + "id", + "sort", + "num_i asc"), "*[count(//doc)=8]", "//result/doc[1][str[@name='id'][.='p3s3']]", // 1234 "//result/doc[2][str[@name='id'][.='z3']]", @@ -999,14 +1081,21 @@ public void testBlockCollapseWithExpandComponent() { // score based collapse with boost to change p1 group head assertQ( - req( - "q", "txt_t:XX", // only child docs with XX match - "expand", "true", - "qt", "/elevate", - "elevateIds", "p1s1", - "fl", "id", - "fq", "{!collapse " + opt + nullPolicy + "}", - "sort", "score desc, num_i asc"), + reqWithPath( + "/elevate", + "q", + "txt_t:XX", + // only child docs with XX match + "expand", + "true", + "elevateIds", + "p1s1", + "fl", + "id", + "fq", + "{!collapse " + opt + nullPolicy + "}", + "sort", + "score desc, num_i asc"), "*[count(/response/result/doc)=3]", "/response/result/doc[1]/str[@name='id'][.='p1s1']", "/response/result/doc[2]/str[@name='id'][.='p2s4']", diff --git a/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java b/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java index 5b674fd4cc7..d8284e1fd1d 100644 --- a/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java +++ b/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java @@ -183,11 +183,10 @@ public void testMultiSort() { params.add("q", "*:*"); params.add("fq", "{!collapse field=group_s sort='term_s desc, test_l asc'}"); params.add("sort", "test_l asc"); - params.add("qt", "/elevate"); params.add("forceElevation", "true"); params.add("elevateIds", "4"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=2]", "//result/doc[1]/str[@name='id'][.='4']", "//result/doc[2]/str[@name='id'][.='5']"); @@ -196,11 +195,10 @@ public void testMultiSort() { params.add("q", "*:*"); params.add("fq", "{!collapse field=group_s sort='term_s desc, test_l asc'}"); params.add("sort", "test_l asc"); - params.add("qt", "/elevate"); params.add("forceElevation", "true"); params.add("elevateIds", "7"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=2]", "//result/doc[1]/str[@name='id'][.='7']", "//result/doc[2]/str[@name='id'][.='1']"); @@ -567,9 +565,8 @@ private void testCollapseQueries(String group, String hint, boolean numeric) { params.add("defType", "edismax"); params.add("bf", "field(test_i)"); params.add("qf", "term_s"); - params.add("qt", "/elevate"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=4]", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -586,10 +583,9 @@ private void testCollapseQueries(String group, String hint, boolean numeric) { params.add("defType", "edismax"); params.add("bf", "field(test_i)"); params.add("qf", "term_s"); - params.add("qt", "/elevate"); params.add("elevateIds", "1,5"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='5']", @@ -605,10 +601,9 @@ private void testCollapseQueries(String group, String hint, boolean numeric) { params.add("defType", "edismax"); params.add("bf", "field(test_i)"); params.add("qf", "term_s"); - params.add("qt", "/elevate"); params.add("elevateIds", "1,5"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='5']", @@ -624,10 +619,9 @@ private void testCollapseQueries(String group, String hint, boolean numeric) { params.add("defType", "edismax"); params.add("bf", "field(test_i)"); params.add("qf", "term_s"); - params.add("qt", "/elevate"); params.add("elevateIds", "1,5"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='5']", @@ -641,10 +635,9 @@ private void testCollapseQueries(String group, String hint, boolean numeric) { params.add("defType", "edismax"); params.add("bf", "field(test_i)"); params.add("qf", "term_s"); - params.add("qt", "/elevate"); params.add("elevateIds", "3,4"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=4]", "//result/doc[1]/str[@name='id'][.='3']", "//result/doc[2]/str[@name='id'][.='4']", @@ -975,9 +968,8 @@ private void testCollapseQueries(String group, String hint, boolean numeric) { params.add("defType", "edismax"); params.add("bf", "field(test_i)"); params.add("qf", "term_s"); - params.add("qt", "/elevate"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='3']", "//result/doc[2]/str[@name='id'][.='6']", @@ -1380,10 +1372,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[3]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "1,5", "q", @@ -1397,10 +1388,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[4]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "0,7", "q", @@ -1415,10 +1405,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[5]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "6,0", "q", @@ -1447,10 +1436,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[4]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "1,5", "q", @@ -1465,10 +1453,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[5]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "0,7", "q", @@ -1483,10 +1470,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[5]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "6,0", "q", @@ -1517,10 +1503,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[6]/str[@name='id'][.='0']" // null ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "1,5", "q", @@ -1537,10 +1522,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[7]/str[@name='id'][.='0']" // null ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "0,7", "q", @@ -1556,10 +1540,9 @@ public void testNullGroupNumericVsStringCollapse() { "//result/doc[6]/str[@name='id'][.='3']" // group B ); assertQ( - req( + reqWithPath( + "/elevate", params( - "qt", - "/elevate", "elevateIds", "6,0", "q", diff --git a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java index f3149af82bc..e674c92eb41 100644 --- a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java +++ b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java @@ -491,10 +491,9 @@ public void testReRankQueries() { params.add("fl", "id,score"); params.add("start", "0"); params.add("rows", "10"); - params.add("qt", "/elevate"); params.add("elevateIds", "1"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=6]", "//result/doc[1]/str[@name='id'][.='1']", "//result/doc[2]/str[@name='id'][.='2']", @@ -553,11 +552,10 @@ public void testReRankQueries() { params.add("fl", "id,score"); params.add("start", "0"); params.add("rows", "10"); - params.add("qt", "/elevate"); params.add("elevateIds", "1,4"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=6]", "//result/doc[1]/str[@name='id'][.='1']", // Elevated "//result/doc[2]/str[@name='id'][.='4']", // Elevated @@ -585,11 +583,10 @@ public void testReRankQueries() { params.add("fl", "id,score"); params.add("start", "0"); params.add("rows", "10"); - params.add("qt", "/elevate"); params.add("elevateIds", "4,1"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=6]", "//result/doc[1]/str[@name='id'][.='4']", // Elevated "//result/doc[2]/str[@name='id'][.='1']", // Elevated @@ -616,11 +613,10 @@ public void testReRankQueries() { params.add("fl", "id,score"); params.add("start", "0"); params.add("rows", "10"); - params.add("qt", "/elevate"); params.add("elevateIds", "4,1"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=6]", "//result/doc[1]/str[@name='id'][.='4']", // Elevated "//result/doc[2]/str[@name='id'][.='1']", // Elevated @@ -649,11 +645,10 @@ public void testReRankQueries() { params.add("fl", "id,score"); params.add("start", "4"); params.add("rows", "10"); - params.add("qt", "/elevate"); params.add("elevateIds", "4,1"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=2]", "//result/doc[1]/str[@name='id'][.='3']", "//result/doc[2]/str[@name='id'][.='2']" // Was not in reRankDocs @@ -678,10 +673,9 @@ public void testReRankQueries() { params.add("fl", "id,score"); params.add("start", "4"); params.add("rows", "10"); - params.add("qt", "/elevate"); params.add("elevateIds", "4,1"); - assertQ(req(params), "*[count(//doc)=0]"); + assertQ(reqWithPath("/elevate", params), "*[count(//doc)=0]"); // Pass in reRankDocs lower than the length being collected. params = new ModifiableSolrParams(); @@ -1095,11 +1089,10 @@ public void testOverRank() { params.add("fl", "id,score"); params.add("start", "0"); params.add("rows", "3"); - params.add("qt", "/elevate"); params.add("elevateIds", "1,4"); assertQ( - req(params), + reqWithPath("/elevate", params), "*[count(//doc)=3]", "//result/doc[1]/str[@name='id'][.='1']", // Elevated "//result/doc[2]/str[@name='id'][.='4']", // Elevated diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java index 9665aac95b6..b3c50f8e151 100644 --- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java +++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java @@ -848,15 +848,6 @@ public static void assertQ(SolrQueryRequest req, String... tests) { /** Validates a query matches some XPath test expressions and closes the query */ public static void assertQ(String message, SolrQueryRequest req, String... tests) { - assertQ(message, req.getParams().get(CommonParams.QT), req, tests); - } - - /** - * Validates a query against the named handler matches some XPath test expressions and closes the - * query - */ - public static void assertQ( - String message, String handler, SolrQueryRequest req, String... tests) { try { String m = (null == message) ? "" : message + " "; // TODO log 'm' !!! // since the default (standard) response format is now JSON @@ -866,7 +857,7 @@ public static void assertQ( // for tests, let's turn indention off so we don't have to handle extraneous spaces xmlWriterTypeParams.set("indent", xmlWriterTypeParams.get("indent", "off")); req.setParams(xmlWriterTypeParams); - String response = h.query(handler, req); + String response = h.query(req); if (req.getParams().getBool("facet", false)) { // add a test to ensure that faceting did not throw an exception @@ -1089,6 +1080,7 @@ public static void assertQEx(String message, SolrQueryRequest req, int code) { } } + /** Makes sure a query throws a SolrException with the listed response code */ public static void assertQEx(String message, SolrQueryRequest req, SolrException.ErrorCode code) { try { ignoreException("."); @@ -1310,6 +1302,37 @@ public static SolrQueryRequest req(SolrParams params, String... moreParams) { return new SolrQueryRequestBase(h.getCore(), mp); } + /** + * Generates a SolrQueryRequest representing the specified path and query params + * + *

Path information is used by {@link #assertQ(SolrQueryRequest, String...)} and similar + * helpers to look up the request handler to invoke. When used with these helpers, typically only + * the requestHandler path segment need by provided ("/select", "/export", etc.) + * + * @see #req(String...) + */ + public static SolrQueryRequest reqWithPath(String path, String... params) { + return withPath(path, req(params)); + } + + /** + * Generates a SolrQueryRequest representing the specified path and query params + * + *

Path information is used by {@link #assertQ(SolrQueryRequest, String...)} and similar + * helpers to look up the request handler to invoke. When used with these helpers, typically only + * the requestHandler path segment need by provided ("/select", "/export", etc.) + * + * @see #req(SolrParams, String...) + */ + public static SolrQueryRequest reqWithPath(String path, SolrParams params, String... moreParams) { + return withPath(path, req(params, moreParams)); + } + + public static SolrQueryRequest withPath(String path, SolrQueryRequest req) { + req.getContext().put(CommonParams.PATH, path); + return req; + } + /** Necessary to make method signatures un-ambiguous */ public static class XmlDoc { public String xml; diff --git a/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java b/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java index d4ff7bc3195..f0808526c0d 100644 --- a/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java +++ b/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java @@ -307,7 +307,9 @@ public String validateQuery(SolrQueryRequest req, String... tests) throws Except * @see SolrQueryRequestBase */ public String query(SolrQueryRequest req) throws Exception { - return query(req.getParams().get(CommonParams.QT), req); + String path = req.getPath(); + String handler = path != null ? path : req.getParams().get(CommonParams.QT); + return query(handler, req); } /**