You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by eh...@apache.org on 2017/05/02 11:51:34 UTC

lucene-solr:branch_6x: SOLR-1485: fix tests, removing unnecessary tie to Similarity in PayloadDecoder

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x 1023ffbe0 -> 717622aad


SOLR-1485: fix tests, removing unnecessary tie to Similarity in PayloadDecoder


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/717622aa
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/717622aa
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/717622aa

Branch: refs/heads/branch_6x
Commit: 717622aad581116a52ddedd04462f64716f35287
Parents: 1023ffb
Author: Erik Hatcher <eh...@apache.org>
Authored: Tue May 2 07:50:12 2017 -0400
Committer: Erik Hatcher <eh...@apache.org>
Committed: Tue May 2 07:51:01 2017 -0400

----------------------------------------------------------------------
 .../solr/search/FloatPayloadValueSource.java    |  2 +-
 .../apache/solr/search/ValueSourceParser.java   |  5 ++++
 .../PayloadScoringSimilarityWrapper.java        |  2 +-
 .../org/apache/solr/util/PayloadDecoder.java    |  2 +-
 .../java/org/apache/solr/util/PayloadUtils.java |  7 ++---
 .../solr/search/function/TestFunctionQuery.java | 31 ++++++++++----------
 6 files changed, 27 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/717622aa/solr/core/src/java/org/apache/solr/search/FloatPayloadValueSource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/FloatPayloadValueSource.java b/solr/core/src/java/org/apache/solr/search/FloatPayloadValueSource.java
index e926ef8..65b5fa0 100644
--- a/solr/core/src/java/org/apache/solr/search/FloatPayloadValueSource.java
+++ b/solr/core/src/java/org/apache/solr/search/FloatPayloadValueSource.java
@@ -163,7 +163,7 @@ public class FloatPayloadValueSource extends ValueSource {
             docs.nextPosition();
             BytesRef payload = docs.getPayload();
             if (payload != null) {
-              float payloadVal = decoder.decode(null, atDoc, docs.startOffset(), docs.endOffset(), payload);
+              float payloadVal = decoder.decode(atDoc, docs.startOffset(), docs.endOffset(), payload);
 
               // payloadFunction = null represents "first"
               if (payloadFunction == null) return payloadVal;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/717622aa/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
index 932c104..13f07d7 100644
--- a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
@@ -743,6 +743,11 @@ public abstract class ValueSourceParser implements NamedListInitializedPlugin {
 
         FieldType fieldType = fp.getReq().getCore().getLatestSchema().getFieldTypeNoEx(tinfo.field);
         PayloadDecoder decoder = PayloadUtils.getPayloadDecoder(fieldType);
+
+        if (decoder==null) {
+          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No payload decoder found for field: " + tinfo.field);
+        }
+
         return new FloatPayloadValueSource(
             tinfo.field,
             tinfo.val,

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/717622aa/solr/core/src/java/org/apache/solr/search/similarities/PayloadScoringSimilarityWrapper.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/similarities/PayloadScoringSimilarityWrapper.java b/solr/core/src/java/org/apache/solr/search/similarities/PayloadScoringSimilarityWrapper.java
index b32330b..f2ab16c 100644
--- a/solr/core/src/java/org/apache/solr/search/similarities/PayloadScoringSimilarityWrapper.java
+++ b/solr/core/src/java/org/apache/solr/search/similarities/PayloadScoringSimilarityWrapper.java
@@ -71,7 +71,7 @@ public class PayloadScoringSimilarityWrapper extends Similarity {
 
       @Override
       public float computePayloadFactor(int doc, int start, int end, BytesRef payload) {
-        return decoder.decode(simScorer, doc, start, end, payload);
+        return decoder.decode(doc, start, end, payload);
       }
     };
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/717622aa/solr/core/src/java/org/apache/solr/util/PayloadDecoder.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/PayloadDecoder.java b/solr/core/src/java/org/apache/solr/util/PayloadDecoder.java
index f9495b1..cca50e2 100644
--- a/solr/core/src/java/org/apache/solr/util/PayloadDecoder.java
+++ b/solr/core/src/java/org/apache/solr/util/PayloadDecoder.java
@@ -24,5 +24,5 @@ import org.apache.lucene.util.BytesRef;
  * Mirrors SimScorer#computePayloadFactor's signature
  */
 public interface PayloadDecoder {
-  float decode(Similarity.SimScorer simScorer, int doc, int start, int end, BytesRef payload);
+  float decode(int doc, int start, int end, BytesRef payload);
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/717622aa/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/PayloadUtils.java b/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
index 7927594..32e2fd9 100644
--- a/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/PayloadUtils.java
@@ -33,7 +33,6 @@ import org.apache.lucene.queries.payloads.AveragePayloadFunction;
 import org.apache.lucene.queries.payloads.MaxPayloadFunction;
 import org.apache.lucene.queries.payloads.MinPayloadFunction;
 import org.apache.lucene.queries.payloads.PayloadFunction;
-import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.search.spans.SpanNearQuery;
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
@@ -69,15 +68,15 @@ public class PayloadUtils {
   }
 
   public static PayloadDecoder getPayloadDecoder(FieldType fieldType) {
-    PayloadDecoder decoder = Similarity.SimScorer::computePayloadFactor;  // default to SimScorer's
+    PayloadDecoder decoder = null;
 
     String encoder = getPayloadEncoder(fieldType);
 
     if ("integer".equals(encoder)) {
-      decoder = (Similarity.SimScorer simScorer, int doc, int start, int end, BytesRef payload) -> PayloadHelper.decodeInt(payload.bytes, payload.offset);
+      decoder = (int doc, int start, int end, BytesRef payload) -> PayloadHelper.decodeInt(payload.bytes, payload.offset);
     }
     if ("float".equals(encoder)) {
-      decoder = (Similarity.SimScorer simScorer, int doc, int start, int end, BytesRef payload) -> PayloadHelper.decodeFloat(payload.bytes, payload.offset);
+      decoder = (int doc, int start, int end, BytesRef payload) -> PayloadHelper.decodeFloat(payload.bytes, payload.offset);
     }
     // encoder could be "identity" at this point, in the case of DelimitedTokenFilterFactory encoder="identity"
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/717622aa/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
index 005948b..86a208b 100644
--- a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
+++ b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
@@ -466,28 +466,29 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
   public void testPayloadFunction() {
     clearIndex();
 
-    assertU(adoc("id","1", "vals_dp","A|1.0 B|2.0 C|3.0 mult|50 mult|100 x|22 x|37 x|19", "default_f", "42.0"));
+    assertU(adoc("id","1", "vals_dpf","A|1.0 B|2.0 C|3.0 mult|50 mult|100 x|22 x|37 x|19", "default_f", "42.0"));
     assertU(commit());
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,A)"), "//float[@name='score']='1.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,B)"), "//float[@name='score']='2.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,C,0)"), "//float[@name='score']='3.0'");
+
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,A)"), "//float[@name='score']='1.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,B)"), "//float[@name='score']='2.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,C,0)"), "//float[@name='score']='3.0'");
 
     // Test defaults, constant, field, and function value sources
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,D,37.0)"), "//float[@name='score']='37.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,E,default_f)"), "//float[@name='score']='42.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,E,mul(2,default_f))"), "//float[@name='score']='84.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,D,37.0)"), "//float[@name='score']='37.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,E,default_f)"), "//float[@name='score']='42.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,E,mul(2,default_f))"), "//float[@name='score']='84.0'");
 
     // Test PayloadFunction's for multiple terms, average being the default
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,mult,0.0,min)"), "//float[@name='score']='50.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,mult,0.0,max)"), "//float[@name='score']='100.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,mult,0.0,average)"), "//float[@name='score']='75.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,mult)"), "//float[@name='score']='75.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,mult,0.0,min)"), "//float[@name='score']='50.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,mult,0.0,max)"), "//float[@name='score']='100.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,mult,0.0,average)"), "//float[@name='score']='75.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,mult)"), "//float[@name='score']='75.0'");
 
     // Test special "first" function, by checking the other functions with same term too
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,x,0.0,min)"), "//float[@name='score']='19.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,x,0.0,max)"), "//float[@name='score']='37.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,x,0.0,average)"), "//float[@name='score']='26.0'");
-    assertQ(req("fl","*,score","q", "{!func}payload(vals_dp,x,0.0,first)"), "//float[@name='score']='22.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,x,0.0,min)"), "//float[@name='score']='19.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,x,0.0,max)"), "//float[@name='score']='37.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,x,0.0,average)"), "//float[@name='score']='26.0'");
+    assertQ(req("fl","*,score","q", "{!func}payload(vals_dpf,x,0.0,first)"), "//float[@name='score']='22.0'");
   }
 
   @Test