From 62c1481594c1a576bf5d612907a9fd85d181abfb Mon Sep 17 00:00:00 2001 From: Shalin Shekhar Mangar Date: Thu, 11 Jun 2015 14:35:47 +0000 Subject: [PATCH] SOLR-6835: ReRankQueryParserPlugin checks now whether the reRankQuery parameter is present and not empty git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1684904 13f79535-47bb-0310-9956-ffa450edef68 --- solr/CHANGES.txt | 3 ++ .../solr/search/ReRankQParserPlugin.java | 4 ++- .../solr/search/TestReRankQParserPlugin.java | 34 ++++++++++++++----- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index e794ae3ccf7..8d00d084998 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -121,6 +121,9 @@ Bug Fixes * SOLR-7108: Change default query used by /admin/ping to not rely on other parameters such as query parser or default field. (ehatcher) +* SOLR-6835: ReRankQueryParserPlugin checks now whether the reRankQuery parameter is present and not empty. + (帅广应, Marius Grama via shalin) + Optimizations ---------------------- * SOLR-7660: Avoid redundant 'exists' calls made to ZK while fetching cluster state updates. (shalin) diff --git a/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java index 4d9ff999b47..1d975950a5b 100644 --- a/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java +++ b/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java @@ -78,8 +78,10 @@ public class ReRankQParserPlugin extends QParserPlugin { } public Query parse() throws SyntaxError { - String reRankQueryString = localParams.get("reRankQuery"); + if (reRankQueryString == null || reRankQueryString.trim().length() == 0) { + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "reRankQuery parameter is mandatory"); + } QParser reRankParser = QParser.getParser(reRankQueryString, null, req); Query reRankQuery = reRankParser.parse(); 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 43e7c3a13c4..b0a547f0683 100644 --- a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java +++ b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java @@ -23,11 +23,6 @@ import org.apache.solr.common.params.ModifiableSolrParams; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import com.carrotsearch.hppc.IntOpenHashSet; - -import java.io.IOException; -import java.util.*; -import java.util.Random; public class TestReRankQParserPlugin extends SolrTestCaseJ4 { @@ -517,9 +512,32 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 { "//result/doc[1]/float[@name='id'][.='1.0']", //Elevated "//result/doc[2]/float[@name='id'][.='4.0']", //Elevated "//result/doc[3]/float[@name='id'][.='8.0']"); //Boosted during rerank. - - - } + @Test + public void testRerankQueryParsingShouldFailWithoutMandatoryReRankQueryParameter() throws Exception { + assertU(delQ("*:*")); + assertU(commit()); + + String[] doc = {"id", "1", "term_s", "YYYY", "group_s", "group1", "test_ti", "5", "test_tl", "10", "test_tf", "2000"}; + assertU(adoc(doc)); + assertU(commit()); + String[] doc1 = {"id", "2", "term_s", "YYYY", "group_s", "group1", "test_ti", "50", "test_tl", "100", "test_tf", "200"}; + assertU(adoc(doc1)); + assertU(commit()); + + ModifiableSolrParams params = new ModifiableSolrParams(); + + params.add("rq", "{!rerank reRankQuery=$rqq reRankDocs=200}"); + params.add("q", "term_s:YYYY"); + params.add("start", "0"); + params.add("rows", "2"); + + try { + h.query(req(params)); + fail("A syntax error should be thrown when reRankQuery parameter is not specified"); + } catch (SolrException e) { + assertTrue(e.code() == SolrException.ErrorCode.BAD_REQUEST.code); + } + } }