mirror of https://github.com/apache/lucene.git
LUCENE-3421: PayloadTermQuery's explain was wrong when includeSpanScore=false
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1166656 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e758a5e444
commit
619b68a018
|
@ -540,6 +540,9 @@ Bug fixes
|
||||||
* LUCENE-3412: SloppyPhraseScorer was returning non-deterministic results
|
* LUCENE-3412: SloppyPhraseScorer was returning non-deterministic results
|
||||||
for queries with many repeats (Doron Cohen)
|
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 =======================
|
======================= Lucene 3.4.0 =======================
|
||||||
|
|
||||||
Bug fixes
|
Bug fixes
|
||||||
|
|
|
@ -194,11 +194,17 @@ public class PayloadTermQuery extends SpanTermQuery {
|
||||||
payloadExpl.setValue(scorer.getPayloadScore());
|
payloadExpl.setValue(scorer.getPayloadScore());
|
||||||
// combined
|
// combined
|
||||||
ComplexExplanation result = new ComplexExplanation();
|
ComplexExplanation result = new ComplexExplanation();
|
||||||
result.addDetail(expl);
|
if (includeSpanScore) {
|
||||||
result.addDetail(payloadExpl);
|
result.addDetail(expl);
|
||||||
result.setValue(expl.getValue() * payloadExpl.getValue());
|
result.addDetail(payloadExpl);
|
||||||
result.setDescription("btq, product of:");
|
result.setValue(expl.getValue() * payloadExpl.getValue());
|
||||||
result.setMatch(expl.getValue() == 0 ? Boolean.FALSE : Boolean.TRUE); // LUCENE-1303
|
result.setDescription("btq, product of:");
|
||||||
|
} else {
|
||||||
|
result.addDetail(payloadExpl);
|
||||||
|
result.setValue(payloadExpl.getValue());
|
||||||
|
result.setDescription("btq(includeSpanScore=false), result of:");
|
||||||
|
}
|
||||||
|
result.setMatch(true); // LUCENE-1303
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
package org.apache.lucene.search.payloads;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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;
|
||||||
|
import org.apache.lucene.util.BytesRef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TestExplanations subclass focusing on payload queries
|
||||||
|
*/
|
||||||
|
public class TestPayloadExplanations extends TestExplanations {
|
||||||
|
private PayloadFunction functions[] = new PayloadFunction[] {
|
||||||
|
new AveragePayloadFunction(),
|
||||||
|
new MinPayloadFunction(),
|
||||||
|
new MaxPayloadFunction(),
|
||||||
|
};
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** macro for payloadtermquery */
|
||||||
|
private SpanQuery pt(String s, PayloadFunction fn, boolean includeSpanScore) {
|
||||||
|
return new PayloadTermQuery(new Term(FIELD,s), fn, includeSpanScore);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* simple PayloadTermQueries */
|
||||||
|
|
||||||
|
public void testPT1() throws Exception {
|
||||||
|
for (PayloadFunction fn : functions) {
|
||||||
|
qtest(pt("w1", fn, false), new int[] {0,1,2,3});
|
||||||
|
qtest(pt("w1", fn, true), new int[] {0,1,2,3});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPT2() throws Exception {
|
||||||
|
for (PayloadFunction fn : functions) {
|
||||||
|
SpanQuery q = pt("w1", fn, false);
|
||||||
|
q.setBoost(1000);
|
||||||
|
qtest(q, new int[] {0,1,2,3});
|
||||||
|
q = pt("w1", fn, true);
|
||||||
|
q.setBoost(1000);
|
||||||
|
qtest(q, new int[] {0,1,2,3});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPT4() throws Exception {
|
||||||
|
for (PayloadFunction fn : functions) {
|
||||||
|
qtest(pt("xx", fn, false), new int[] {2,3});
|
||||||
|
qtest(pt("xx", fn, true), new int[] {2,3});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPT5() throws Exception {
|
||||||
|
for (PayloadFunction fn : functions) {
|
||||||
|
SpanQuery q = pt("xx", fn, false);
|
||||||
|
q.setBoost(1000);
|
||||||
|
qtest(q, new int[] {2,3});
|
||||||
|
q = pt("xx", fn, true);
|
||||||
|
q.setBoost(1000);
|
||||||
|
qtest(q, new int[] {2,3});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: test the payloadnear query too!
|
||||||
|
}
|
Loading…
Reference in New Issue