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 */