You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mu...@apache.org on 2019/06/29 17:03:07 UTC

[lucene-solr] branch master updated: SOLR-12364: add test cases for edismax boost

This is an automated email from the ASF dual-hosted git repository.

munendrasn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new cfd6e1a  SOLR-12364: add test cases for edismax boost
cfd6e1a is described below

commit cfd6e1adfaed17f260cd874c02dab7b04acf280c
Author: Munendra S N <mu...@apache.org>
AuthorDate: Sat Jun 29 22:16:51 2019 +0530

    SOLR-12364: add test cases for edismax boost
    
    * This adds tests for bf and boosts
    * Use expectThrows in edismax tests to verify exception
---
 solr/CHANGES.txt                                   |  2 +
 .../solr/search/TestExtendedDismaxParser.java      | 76 ++++++++++++++++++----
 2 files changed, 65 insertions(+), 13 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 5a5091c..02ee9e4 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -224,6 +224,8 @@ Other Changes
 
 * SOLR-13576: Factor out a TopGroupsShardResponseProcessor.fillResultIds method. (Christine Poerschke, Diego Ceccarelli)
 
+* SOLR-12364: Add test cases for edismax boost (David Smiley, Munendra S N)
+
 ==================  8.1.2 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
index 19ac53b..72546cc 100644
--- a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
@@ -39,7 +39,6 @@ import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.Utils;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.util.SolrPluginUtils;
-import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -522,6 +521,56 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
      );
   }
 
+  @Test
+  public void testBf() {
+    assertQ(
+        req("q", "tekna", "qf", "text_sw", "defType", "edismax", "bf", "ord(id)", "fq", "id:[52 TO 54]", "fl", "id,score"),
+        "//doc[1]/str[@name='id'][.='54']",
+        "//doc[2]/str[@name='id'][.='53']",
+        "//doc[3]/str[@name='id'][.='52']"
+    );
+
+    assertQ(req("q", "tekna", "qf", "text_sw", "defType", "edismax",
+        "bf", "if(and(query({!v='id:53'})),120,if(query({!v='id:52'}),10,0))", "fq", "id:[52 TO 54]", "fl", "id,score"),
+        "//doc[1]/str[@name='id'][.='53']",
+        "//doc[2]/str[@name='id'][.='52']",
+        "//doc[3]/str[@name='id'][.='54']");
+
+    // adding value from a field
+    // 0 would be returned for negative values
+    assertQ(req("q", "*:*", "qf", "text_sw", "defType", "edismax",
+        "bf", "foo_i", "fq", "id:[47 TO 49]", "fl", "id,score"),
+        "//doc[1]/str[@name='id'][.='48']",
+        "//doc[2]/str[@name='id'][.='47']",
+        "//doc[3]/str[@name='id'][.='49']");
+  }
+
+  @Test
+  public void testBoost() {
+    assertQ(
+        req("q", "*:*", "qf", "text_sw", "defType", "edismax", "boost", "exists(foo_i)", "fq", "id:[47 TO 49]",
+            "fl", "id,score", "boost", "if(not(query({!v=id:49})),10,1)"),
+        "//doc[1]/str[@name='id'][.='48']",
+        "//doc[2]/str[@name='id'][.='49']",
+        "//doc[3]/str[@name='id'][.='47']"
+    );
+
+    assertQ(req("q", "tekna", "qf", "text_sw", "defType", "edismax",
+        "boost", "if(and(query({!v='id:53'})),120,if(query({!v='id:52'}),0.0002,1))", "fq", "id:[52 TO 54]", "fl", "id,score"),
+        "//doc[1]/str[@name='id'][.='53']",
+        "//doc[2]/str[@name='id'][.='54']",
+        "//doc[3]/str[@name='id'][.='52']");
+
+    // adding value from a field
+    // using sum to verify the order
+    // 0 would be returned for negative values or if the field value is not present
+    assertQ(req("q", "*:*", "qf", "text_sw", "defType", "edismax",
+        "boost", "sum(foo_i,1)", "fq", "id:[48 TO 50]", "fl", "id,score"),
+        "//doc[1]/str[@name='id'][.='48']",
+        "//doc[2]/str[@name='id'][.='50']",
+        "//doc[3]/str[@name='id'][.='49']");
+  }
+
   public void testUserFields() {
     String allr = "*[count(//doc)=10]";
     String oner = "*[count(//doc)=1]";
@@ -2078,9 +2127,13 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
   }
 
   /** SOLR-11512 */
-  @Test(expected=SolrException.class)
+  @Test
   public void killInfiniteRecursionParse() throws Exception {
-    assertJQ(req("defType", "edismax", "q", "*", "qq", "{!edismax v=something}", "bq", "{!edismax v=$qq}"));
+    SolrException exception = expectThrows(SolrException.class, () -> {
+      h.query(req("defType", "edismax", "q", "*", "qq", "{!edismax v=something}", "bq", "{!edismax v=$qq}"));
+    });
+    assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+    assertTrue(exception.getMessage().contains("Infinite Recursion detected parsing query"));
   }
 
   /** SOLR-5163 */
@@ -2095,19 +2148,16 @@ public class TestExtendedDismaxParser extends SolrTestCaseJ4 {
     params.add("debugQuery", "true");
 
     // test valid field names
-    try (SolrQueryRequest req = req(params)) {
-      String response = h.query(req);
-      response.contains("+DisjunctionMaxQuery((title:olive | (subject:oliv)^3.0)) +DisjunctionMaxQuery((title:other | (subject:other)^3.0))");
-    }
+    String response = h.query(req(params));
+    assertTrue(response.contains("+DisjunctionMaxQuery((title:olive | " +
+        "(subject:oliv)^3.0)) +DisjunctionMaxQuery((title:other | (subject:other)^3.0))"));
 
     // test invalid field name
     params.set("qf", "subject^3 nosuchfield");
-    try (SolrQueryRequest req = req(params)) {
-      h.query(req);
-    } catch (Exception e) {
-      Assert.assertEquals("org.apache.solr.search.SyntaxError: Query Field 'nosuchfield' is not a valid field name", e.getMessage());
-    }
-
+    SolrException exception = expectThrows(SolrException.class, () -> h.query(req(params)));
+    assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
+    assertEquals("org.apache.solr.search.SyntaxError: Query Field 'nosuchfield' is not a valid field name",
+        exception.getMessage());
   }
 
 }