You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/09/08 15:09:09 UTC

svn commit: r1166671 - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/backwards/ lucene/backwards/src/test-framework/ lucene/backwards/src/test/ lucene/src/java/org/apache/lucene/search/payloads/ lucene/src/test/org/apache/lucene/search/payloads/...

Author: rmuir
Date: Thu Sep  8 13:09:08 2011
New Revision: 1166671

URL: http://svn.apache.org/viewvc?rev=1166671&view=rev
Log:
LUCENE-3421: PayloadTermQuery's explain was wrong when includeSpanScore=false

Added:
    lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java
      - copied, changed from r1166656, lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java
Modified:
    lucene/dev/branches/branch_3x/   (props changed)
    lucene/dev/branches/branch_3x/lucene/   (props changed)
    lucene/dev/branches/branch_3x/lucene/CHANGES.txt
    lucene/dev/branches/branch_3x/lucene/backwards/   (props changed)
    lucene/dev/branches/branch_3x/lucene/backwards/src/test/   (props changed)
    lucene/dev/branches/branch_3x/lucene/backwards/src/test-framework/   (props changed)
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java
    lucene/dev/branches/branch_3x/solr/   (props changed)

Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1166671&r1=1166670&r2=1166671&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Thu Sep  8 13:09:08 2011
@@ -10,6 +10,9 @@ Bug fixes
 * LUCENE-3412: SloppyPhraseScorer was returning non-deterministic results 
   for queries with many repeats (Doron Cohen)
 
+* LUCENE-3421: PayloadTermQuery's explain was wrong when includeSpanScore=false.
+  (Edward Drapkin via Robert Muir)
+
 ======================= Lucene 3.4.0 =======================
 
 Bug fixes

Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java?rev=1166671&r1=1166670&r2=1166671&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/payloads/PayloadTermQuery.java Thu Sep  8 13:09:08 2011
@@ -78,6 +78,17 @@ public class PayloadTermQuery extends Sp
       return new PayloadTermSpanScorer((TermSpans) query.getSpans(reader),
           this, similarity, reader.norms(query.getField()));
     }
+    
+    @Override
+    public Explanation explain(IndexReader reader, int doc) throws IOException {
+      if (includeSpanScore) {
+        return super.explain(reader, doc);
+      } else {
+        // if we don't include the span score, we need to return our scorer's explanation only
+        PayloadTermSpanScorer scorer = (PayloadTermSpanScorer) scorer(reader, true, false);
+        return scorer.explain(doc);
+      }
+    }
 
     protected class PayloadTermSpanScorer extends SpanScorer {
       // TODO: is this the best way to allocate this?
@@ -166,21 +177,29 @@ public class PayloadTermQuery extends Sp
 
       @Override
       protected Explanation explain(final int doc) throws IOException {
-        ComplexExplanation result = new ComplexExplanation();
         Explanation nonPayloadExpl = super.explain(doc);
-        result.addDetail(nonPayloadExpl);
+        
         // QUESTION: Is there a way to avoid this skipTo call? We need to know
         // whether to load the payload or not
         Explanation payloadBoost = new Explanation();
-        result.addDetail(payloadBoost);
 
         float payloadScore = getPayloadScore();
         payloadBoost.setValue(payloadScore);
         // GSI: I suppose we could toString the payload, but I don't think that
         // would be a good idea
         payloadBoost.setDescription("scorePayload(...)");
-        result.setValue(nonPayloadExpl.getValue() * payloadScore);
-        result.setDescription("btq, product of:");
+        
+        ComplexExplanation result = new ComplexExplanation();
+        if (includeSpanScore) {
+          result.addDetail(nonPayloadExpl);
+          result.addDetail(payloadBoost);
+          result.setValue(nonPayloadExpl.getValue() * payloadScore);
+          result.setDescription("btq, product of:");
+        } else {
+          result.addDetail(payloadBoost);
+          result.setValue(payloadScore);
+          result.setDescription("btq(includeSpanScore=false), result of:");
+        }
         result.setMatch(nonPayloadExpl.getValue() == 0 ? Boolean.FALSE
             : Boolean.TRUE); // LUCENE-1303
         return result;

Copied: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java (from r1166656, lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java?p2=lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java&p1=lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java&r1=1166656&r2=1166671&rev=1166671&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/payloads/TestPayloadExplanations.java Thu Sep  8 13:09:08 2011
@@ -19,7 +19,6 @@ package org.apache.lucene.search.payload
 
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.DefaultSimilarity;
-import org.apache.lucene.search.DefaultSimilarityProvider;
 import org.apache.lucene.search.Similarity;
 import org.apache.lucene.search.TestExplanations;
 import org.apache.lucene.search.spans.SpanQuery;
@@ -38,17 +37,15 @@ public class TestPayloadExplanations ext
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    searcher.setSimilarityProvider(new DefaultSimilarityProvider() {
-      @Override
-      public Similarity get(String field) {
-        return new DefaultSimilarity() {
-          @Override
-          public float scorePayload(int doc, int start, int end, BytesRef payload) {
-            return 1 + (payload.hashCode() % 10);
-          }
-        };
-      }
-    });
+    searcher.setSimilarity(new PayloadBoostSimilarity());
+  }
+  
+  // must be a static class so it can serialize
+  private static class PayloadBoostSimilarity extends DefaultSimilarity {
+    @Override
+    public float scorePayload(int docId, String fieldName, int start, int end, byte[] payload, int offset, int length) {
+      return 1 + (new BytesRef(payload, offset, length).hashCode() % 10);
+    }
   }
 
   /** macro for payloadtermquery */