You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/07/13 10:34:45 UTC

svn commit: r1361093 - in /lucene/dev/branches/branch_4x: ./ dev-tools/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std31/ lucene/analysis/common/src/java/org/apache/lucene/analys...

Author: yonik
Date: Fri Jul 13 08:34:43 2012
New Revision: 1361093

URL: http://svn.apache.org/viewvc?rev=1361093&view=rev
Log:
SOLR-3377: edismax fails to correctly parse a fielded query wrapped by parens

Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/dev-tools/   (props changed)
    lucene/dev/branches/branch_4x/lucene/   (props changed)
    lucene/dev/branches/branch_4x/lucene/BUILD.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/CHANGES.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/JRE_VERSION_MIGRATION.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/LICENSE.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/MIGRATE.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/README.txt   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/common/   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std31/package.html   (props changed)
    lucene/dev/branches/branch_4x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std34/package.html   (props changed)
    lucene/dev/branches/branch_4x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_4x/lucene/benchmark/   (props changed)
    lucene/dev/branches/branch_4x/lucene/build.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/common-build.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/core/   (props changed)
    lucene/dev/branches/branch_4x/lucene/demo/   (props changed)
    lucene/dev/branches/branch_4x/lucene/facet/   (props changed)
    lucene/dev/branches/branch_4x/lucene/grouping/   (props changed)
    lucene/dev/branches/branch_4x/lucene/highlighter/   (props changed)
    lucene/dev/branches/branch_4x/lucene/ivy-settings.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/join/   (props changed)
    lucene/dev/branches/branch_4x/lucene/memory/   (props changed)
    lucene/dev/branches/branch_4x/lucene/misc/   (props changed)
    lucene/dev/branches/branch_4x/lucene/module-build.xml   (props changed)
    lucene/dev/branches/branch_4x/lucene/queries/   (props changed)
    lucene/dev/branches/branch_4x/lucene/queryparser/   (props changed)
    lucene/dev/branches/branch_4x/lucene/sandbox/   (props changed)
    lucene/dev/branches/branch_4x/lucene/site/   (props changed)
    lucene/dev/branches/branch_4x/lucene/spatial/   (props changed)
    lucene/dev/branches/branch_4x/lucene/suggest/   (props changed)
    lucene/dev/branches/branch_4x/lucene/test-framework/   (props changed)
    lucene/dev/branches/branch_4x/lucene/tools/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/solr/LICENSE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/README.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/build.xml   (props changed)
    lucene/dev/branches/branch_4x/solr/cloud-dev/   (props changed)
    lucene/dev/branches/branch_4x/solr/common-build.xml   (props changed)
    lucene/dev/branches/branch_4x/solr/contrib/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
    lucene/dev/branches/branch_4x/solr/dev-tools/   (props changed)
    lucene/dev/branches/branch_4x/solr/example/   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpclient-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpclient-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpcore-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpcore-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpmime-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/lib/httpmime-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_4x/solr/scripts/   (props changed)
    lucene/dev/branches/branch_4x/solr/solrj/   (props changed)
    lucene/dev/branches/branch_4x/solr/test-framework/   (props changed)
    lucene/dev/branches/branch_4x/solr/testlogging.properties   (props changed)
    lucene/dev/branches/branch_4x/solr/webapp/   (props changed)

Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1361093&r1=1361092&r2=1361093&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Fri Jul 13 08:34:43 2012
@@ -76,6 +76,10 @@ Bug Fixes
 
 * SOLR-3610: After reloading a core, indexing would fail on any newly added fields to the schema. (Brent Mills, rmuir)
 
+* SOLR-3377: edismax fails to correctly parse a fielded query wrapped by parens.
+  This regression was introduced in 3.6.  (Bernd Fehling, Jan Høydahl, yonik)
+
+
 Other Changes
 
 * SOLR-3524: Make discarding punctuation configurable in JapaneseTokenizerFactory.

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java?rev=1361093&r1=1361092&r2=1361093&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java Fri Jul 13 08:34:43 2012
@@ -624,6 +624,7 @@ class ExtendedDismaxQParser extends QPar
     }
 
     String field;
+    String rawField;  // if the clause is +(foo:bar) then rawField=(foo
     boolean isPhrase;
     boolean hasWhitespace;
     boolean hasSpecialSyntax;
@@ -667,7 +668,9 @@ class ExtendedDismaxQParser extends QPar
       }
       if (clause.field != null) {
         disallowUserField = false;
-        pos += clause.field.length(); // skip the field name
+        int colon = s.indexOf(':',pos);
+        clause.rawField = s.substring(pos, colon);
+        pos += colon - pos; // skip the field name
         pos++;  // skip the ':'
       }
 
@@ -798,6 +801,10 @@ class ExtendedDismaxQParser extends QPar
     // make sure there is space after the colon, but not whitespace
     if (colon<=pos || colon+1>=end || Character.isWhitespace(s.charAt(colon+1))) return null;
     char ch = s.charAt(p++);
+    while ((ch=='(' || ch=='+' || ch=='-') && (pos<end)) {
+      ch = s.charAt(p++);
+      pos++;
+    }
     if (!Character.isJavaIdentifierPart(ch)) return null;
     while (p<colon) {
       ch = s.charAt(p++);

Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java?rev=1361093&r1=1361092&r2=1361093&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java Fri Jul 13 08:34:43 2012
@@ -52,7 +52,7 @@ public class TestExtendedDismaxParser ex
             "text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
     assertU(adoc("id", "48", "text_sw", "this has gigabyte potential", "foo_i","100"));
     assertU(adoc("id", "49", "text_sw", "start the big apple end", "foo_i","-100"));
-    assertU(adoc("id", "50", "text_sw", "start new big city end"));    
+    assertU(adoc("id", "50", "text_sw", "start new big city end"));
     assertU(adoc("id", "51", "store",   "12.34,-56.78"));
     assertU(adoc("id", "52", "text_sw", "tekna theou klethomen"));
     assertU(adoc("id", "53", "text_sw", "nun tekna theou esmen"));
@@ -352,6 +352,7 @@ public class TestExtendedDismaxParser ex
   }
 
   public void testUserFields() {
+    String allr = "*[count(//doc)=10]";
     String oner = "*[count(//doc)=1]";
     String nor = "*[count(//doc)=0]";
     
@@ -365,9 +366,24 @@ public class TestExtendedDismaxParser ex
     assertQ(req("defType","edismax", "q","id:42"),
         oner);
     
-    assertQ(req("defType","edismax", "uf","*", "q","id:42"),
+    // SOLR-3377 - parens should be allowed immediately before field name
+    assertQ(req("defType","edismax", "q","( id:42 )"),
         oner);
-    
+    assertQ(req("defType","edismax", "q","(id:42)"),
+        oner);
+    assertQ(req("defType","edismax", "q","(+id:42)"),
+        oner);
+    assertQ(req("defType","edismax", "q","+(+id:42)"),
+        oner);
+    assertQ(req("defType","edismax", "q","+(+((id:42)))"),
+        oner);
+    assertQ(req("defType","edismax", "q","+(+((+id:42)))"),
+        oner);
+    assertQ(req("defType","edismax", "q"," +( +( ( +id:42) ) ) "),
+        oner);
+    assertQ(req("defType","edismax", "q","(id:(*:*)^200)"),
+        allr);
+
     assertQ(req("defType","edismax", "uf","id", "q","id:42"),
         oner);