You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2014/10/14 00:36:06 UTC

svn commit: r1631592 - in /lucene/dev/branches/branch_5x: ./ dev-tools/ lucene/ lucene/analysis/ lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/ lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/ lucene...

Author: hossman
Date: Mon Oct 13 22:36:04 2014
New Revision: 1631592

URL: http://svn.apache.org/r1631592
Log:
SOLR-6540 Fix NPE from strdist() func when doc value source does not exist in a doc (merge r1631555)

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/dev-tools/   (props changed)
    lucene/dev/branches/branch_5x/lucene/   (props changed)
    lucene/dev/branches/branch_5x/lucene/BUILD.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/CHANGES.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/JRE_VERSION_MIGRATION.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/LICENSE.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/MIGRATE.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/NOTICE.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/README.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/SYSTEM_REQUIREMENTS.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/Lucene47WordDelimiterFilter.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/ASCIITLD.jflex-macro   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/SUPPLEMENTARY.jflex-macro   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/StandardTokenizerImpl40.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/StandardTokenizerImpl40.jflex   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/UAX29URLEmailTokenizerImpl40.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/UAX29URLEmailTokenizerImpl40.jflex   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/java/org/apache/lucene/analysis/standard/std40/package.html   (props changed)
    lucene/dev/branches/branch_5x/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLucene47WordDelimiterFilter.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/backward-codecs/   (props changed)
    lucene/dev/branches/branch_5x/lucene/benchmark/   (props changed)
    lucene/dev/branches/branch_5x/lucene/build.xml   (props changed)
    lucene/dev/branches/branch_5x/lucene/classification/   (props changed)
    lucene/dev/branches/branch_5x/lucene/classification/build.xml   (props changed)
    lucene/dev/branches/branch_5x/lucene/classification/ivy.xml   (props changed)
    lucene/dev/branches/branch_5x/lucene/classification/src/   (props changed)
    lucene/dev/branches/branch_5x/lucene/codecs/   (props changed)
    lucene/dev/branches/branch_5x/lucene/common-build.xml   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions2.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSort.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/search/TestTotalHitCountCollector.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/demo/   (props changed)
    lucene/dev/branches/branch_5x/lucene/expressions/   (props changed)
    lucene/dev/branches/branch_5x/lucene/facet/   (props changed)
    lucene/dev/branches/branch_5x/lucene/grouping/   (props changed)
    lucene/dev/branches/branch_5x/lucene/highlighter/   (props changed)
    lucene/dev/branches/branch_5x/lucene/ivy-ignore-conflicts.properties   (props changed)
    lucene/dev/branches/branch_5x/lucene/ivy-settings.xml   (props changed)
    lucene/dev/branches/branch_5x/lucene/ivy-versions.properties   (props changed)
    lucene/dev/branches/branch_5x/lucene/join/   (props changed)
    lucene/dev/branches/branch_5x/lucene/licenses/   (props changed)
    lucene/dev/branches/branch_5x/lucene/memory/   (props changed)
    lucene/dev/branches/branch_5x/lucene/misc/   (props changed)
    lucene/dev/branches/branch_5x/lucene/module-build.xml   (props changed)
    lucene/dev/branches/branch_5x/lucene/queries/   (props changed)
    lucene/dev/branches/branch_5x/lucene/queries/src/test/org/apache/lucene/queries/function/TestFunctionQuerySort.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/queryparser/   (props changed)
    lucene/dev/branches/branch_5x/lucene/replicator/   (props changed)
    lucene/dev/branches/branch_5x/lucene/sandbox/   (props changed)
    lucene/dev/branches/branch_5x/lucene/site/   (props changed)
    lucene/dev/branches/branch_5x/lucene/spatial/   (props changed)
    lucene/dev/branches/branch_5x/lucene/spatial/src/java/org/apache/lucene/spatial/bbox/   (props changed)
    lucene/dev/branches/branch_5x/lucene/spatial/src/java/org/apache/lucene/spatial/util/ShapeAreaValueSource.java   (props changed)
    lucene/dev/branches/branch_5x/lucene/spatial/src/test-files/data/simple-bbox.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/spatial/src/test-files/simple-Queries-BBox.txt   (props changed)
    lucene/dev/branches/branch_5x/lucene/spatial/src/test/org/apache/lucene/spatial/bbox/   (props changed)
    lucene/dev/branches/branch_5x/lucene/suggest/   (props changed)
    lucene/dev/branches/branch_5x/lucene/test-framework/   (props changed)
    lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/   (props changed)
    lucene/dev/branches/branch_5x/lucene/tools/   (props changed)
    lucene/dev/branches/branch_5x/lucene/version.properties   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/solr/LICENSE.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/NOTICE.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/README.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/SYSTEM_REQUIREMENTS.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/bin/   (props changed)
    lucene/dev/branches/branch_5x/solr/build.xml   (props changed)
    lucene/dev/branches/branch_5x/solr/cloud-dev/   (props changed)
    lucene/dev/branches/branch_5x/solr/common-build.xml   (props changed)
    lucene/dev/branches/branch_5x/solr/contrib/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/DocValuesStats.java   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/SchemaManager.java   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestConfig.java   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
    lucene/dev/branches/branch_5x/solr/example/   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/httpclient-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/httpclient-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/httpcore-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/httpcore-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/httpmime-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/licenses/httpmime-NOTICE.txt   (props changed)
    lucene/dev/branches/branch_5x/solr/scripts/   (props changed)
    lucene/dev/branches/branch_5x/solr/site/   (props changed)
    lucene/dev/branches/branch_5x/solr/solrj/   (props changed)
    lucene/dev/branches/branch_5x/solr/test-framework/   (props changed)
    lucene/dev/branches/branch_5x/solr/webapp/   (props changed)

Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1631592&r1=1631591&r2=1631592&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Mon Oct 13 22:36:04 2014
@@ -189,6 +189,8 @@ Bug Fixes
 * SOLR-6545: Query field list with wild card on dynamic field fails.
   (Burke Webster, Xu Zhang, shalin)
 
+* SOLR-6540 Fix NPE from strdist() func when doc value source does not exist in a doc (hossman)
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java?rev=1631592&r1=1631591&r2=1631592&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java Mon Oct 13 22:36:04 2014
@@ -51,7 +51,18 @@ public class StringDistanceFunction exte
 
       @Override
       public float floatVal(int doc) {
-        return dist.getDistance(str1DV.strVal(doc), str2DV.strVal(doc));
+        String s1 = str1DV.strVal(doc);
+        String s2 = str2DV.strVal(doc);
+        if (null == s1 || null == s2) {
+          // the only thing a missing value scores 1.0 with is another missing value
+          return (s1 == s2) ? 1.0F : 0.0F;
+        }
+        return dist.getDistance(s1, s2);
+      }
+
+      @Override
+      public boolean exists(int doc) {
+        return str1DV.exists(doc) && str2DV.exists(doc);
       }
 
       @Override

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java?rev=1631592&r1=1631591&r2=1631592&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java Mon Oct 13 22:36:04 2014
@@ -379,14 +379,13 @@ public class StatsComponentTest extends 
     // stats over a string function
     assertQ("strdist func stats",
             req("q", "*:*",
-                "fq", "-id:4", // SOLR-6540
                 "stats","true",
                 "stats.field","{!func}strdist('string22',active_s,edit)")
             , "//double[@name='min'][.='0.75']"
             , "//double[@name='max'][.='0.875']"
             , "//double[@name='sum'][.='2.375']"
             , "//long[@name='count'][.='3']"
-            ,"//long[@name='missing'][.='0']" // SOLR-6540 ==> '1'
+            ,"//long[@name='missing'][.='1']"
             );
 
   }

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java?rev=1631592&r1=1631591&r2=1631592&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java Mon Oct 13 22:36:04 2014
@@ -554,6 +554,29 @@ public class TestFunctionQuery extends S
     assertQ(req("fl", "*,score", "q", "{!func}strdist(x_s, 'foit', edit)", "fq", "id:1"), "//float[@name='score']='0.75'");
     assertQ(req("fl", "*,score", "q", "{!func}strdist(x_s, 'foit', jw)", "fq", "id:1"), "//float[@name='score']='0.8833333'");
     assertQ(req("fl", "*,score", "q", "{!func}strdist(x_s, 'foit', ngram, 2)", "fq", "id:1"), "//float[@name='score']='0.875'");
+
+    // strdist on a missing valuesource should itself by missing, so the ValueSourceAugmenter 
+    // should supress it...
+    assertQ(req("q", "id:1",
+                "fl", "good:strdist(x_s, 'toil', edit)", 
+                "fl", "bad1:strdist(missing1_s, missing2_s, edit)", 
+                "fl", "bad2:strdist(missing1_s, 'something', edit)", 
+                "fl", "bad3:strdist(missing1_s, x_s, edit)")
+            , "//float[@name='good']='0.75'"
+            , "count(//float[starts-with(@name,'bad')])=0"
+            );
+
+    // in a query context, there is always a number...
+    //
+    // if a ValueSource is missing, it is maximally distant from every other
+    // value source *except* for another missing value source 
+    // ie: strdist(null,null)==1 but strdist(null,anything)==0
+    assertQ(req("fl","score","fq", "id:1", "q", "{!func}strdist(missing1_s, missing2_s, edit)"), 
+            "//float[@name='score']='1.0'");
+    assertQ(req("fl","score","fq", "id:1", "q", "{!func}strdist(missing1_s, x_s, edit)"), 
+            "//float[@name='score']='0.0'");
+    assertQ(req("fl","score","fq", "id:1", "q", "{!func}strdist(missing1_s, 'const', edit)"), 
+            "//float[@name='score']='0.0'");
   }
 
   public void dofunc(String func, double val) throws Exception {