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 2011/02/25 01:31:46 UTC
svn commit: r1074363 - in /lucene/dev/branches/branch_3x/lucene: ./
src/java/org/apache/lucene/search/
src/test-framework/org/apache/lucene/search/
src/test/org/apache/lucene/search/
Author: hossman
Date: Fri Feb 25 00:31:45 2011
New Revision: 1074363
URL: http://svn.apache.org/viewvc?rev=1074363&view=rev
Log:
LUCENE-2936: merge 1074357 from trunk
Modified:
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/CHANGES.txt
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/PhraseQuery.java
lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/search/CheckHits.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestSimpleExplanations.java
Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1074363&r1=1074362&r2=1074363&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Fri Feb 25 00:31:45 2011
@@ -1,5 +1,8 @@
Lucene Change Log
+* LUCENE-2936: PhraseQuery score explanations were not correctly
+ identifying matches vs non-matches. (hossman)
+
======================= Lucene 3.x (not yet released) =======================
Changes in backwards compatibility policy
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/PhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/PhraseQuery.java?rev=1074363&r1=1074362&r2=1074363&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/PhraseQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/PhraseQuery.java Fri Feb 25 00:31:45 2011
@@ -210,7 +210,7 @@ public class PhraseQuery extends Query {
public Explanation explain(IndexReader reader, int doc)
throws IOException {
- Explanation result = new Explanation();
+ ComplexExplanation result = new ComplexExplanation();
result.setDescription("weight("+getQuery()+" in "+doc+"), product of:");
StringBuilder docFreqs = new StringBuilder();
@@ -289,10 +289,7 @@ public class PhraseQuery extends Query {
// combine them
result.setValue(queryExpl.getValue() * fieldExpl.getValue());
-
- if (queryExpl.getValue() == 1.0f)
- return fieldExpl;
-
+ result.setMatch(tfExplanation.isMatch());
return result;
}
}
Modified: lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/search/CheckHits.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/search/CheckHits.java?rev=1074363&r1=1074362&r2=1074363&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/search/CheckHits.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/search/CheckHits.java Fri Feb 25 00:31:45 2011
@@ -38,8 +38,8 @@ public class CheckHits {
/**
* Tests that all documents up to maxDoc which are *not* in the
- * expected result set, have an explanation which indicates no match
- * (ie: Explanation value of 0.0f)
+ * expected result set, have an explanation which indicates that
+ * the document does not match
*/
public static void checkNoMatchExplanations(Query q, String defaultFieldName,
Searcher searcher, int[] results)
@@ -58,9 +58,9 @@ public class CheckHits {
Explanation exp = searcher.explain(q, doc);
Assert.assertNotNull("Explanation of [["+d+"]] for #"+doc+" is null",
exp);
- Assert.assertEquals("Explanation of [["+d+"]] for #"+doc+
- " doesn't indicate non-match: " + exp.toString(),
- 0.0f, exp.getValue(), 0.0f);
+ Assert.assertFalse("Explanation of [["+d+"]] for #"+doc+
+ " doesn't indicate non-match: " + exp.toString(),
+ exp.isMatch());
}
}
@@ -498,6 +498,9 @@ public class CheckHits {
Assert.assertNotNull("Explanation of [["+d+"]] for #"+doc+" is null", exp);
verifyExplanation(d,doc,scorer.score(),deep,exp);
+ Assert.assertTrue("Explanation of [["+d+"]] for #"+ doc +
+ " does not indicate match: " + exp.toString(),
+ exp.isMatch());
}
@Override
public void setNextReader(IndexReader reader, int docBase) {
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java?rev=1074363&r1=1074362&r2=1074363&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestExplanations.java Fri Feb 25 00:31:45 2011
@@ -52,7 +52,10 @@ public class TestExplanations extends Lu
protected Directory directory;
public static final String KEY = "KEY";
+ // boost on this field is the same as the iterator for the doc
public static final String FIELD = "field";
+ // same contents, but no field boost
+ public static final String ALTFIELD = "alt";
public static final QueryParser qp =
new QueryParser(TEST_VERSION_CURRENT, FIELD, new WhitespaceAnalyzer(TEST_VERSION_CURRENT));
@@ -72,7 +75,10 @@ public class TestExplanations extends Lu
for (int i = 0; i < docFields.length; i++) {
Document doc = new Document();
doc.add(newField(KEY, ""+i, Field.Store.NO, Field.Index.NOT_ANALYZED));
- doc.add(newField(FIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED));
+ Field f = newField(FIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED);
+ f.setBoost(i);
+ doc.add(f);
+ doc.add(newField(ALTFIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED));
writer.addDocument(doc);
}
reader = writer.getReader();
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestSimpleExplanations.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestSimpleExplanations.java?rev=1074363&r1=1074362&r2=1074363&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestSimpleExplanations.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestSimpleExplanations.java Fri Feb 25 00:31:45 2011
@@ -303,7 +303,6 @@ public class TestSimpleExplanations exte
}
-
public void testTermQueryMultiSearcherExplain() throws Exception {
// creating two directories for indices
Directory indexStoreA = newDirectory();
@@ -372,5 +371,62 @@ public class TestSimpleExplanations exte
indexStoreA.close();
indexStoreB.close();
}
+
+ /* BQ of TQ: using alt so some fields have zero boost and some don't */
+
+ public void testMultiFieldBQ1() throws Exception {
+ qtest("+w1 +alt:w2", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQ2() throws Exception {
+ qtest("+yy +alt:w3", new int[] { 2,3 });
+ }
+ public void testMultiFieldBQ3() throws Exception {
+ qtest("yy +alt:w3", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQ4() throws Exception {
+ qtest("w1 (-xx alt:w2)", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQ5() throws Exception {
+ qtest("w1 (+alt:qq alt:w2)", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQ6() throws Exception {
+ qtest("w1 -(-alt:qq alt:w5)", new int[] { 1,2,3 });
+ }
+ public void testMultiFieldBQ7() throws Exception {
+ qtest("+w1 +(alt:qq (alt:xx -alt:w2) (+alt:w3 +alt:w4))", new int[] { 0 });
+ }
+ public void testMultiFieldBQ8() throws Exception {
+ qtest("+alt:w1 (qq (alt:xx -w2) (+alt:w3 +w4))", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQ9() throws Exception {
+ qtest("+w1 (alt:qq (-xx w2) -(+alt:w3 +w4))", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQ10() throws Exception {
+ qtest("+w1 +(alt:qq (-xx alt:w2) -(+alt:w3 +w4))", new int[] { 1 });
+ }
+
+ /* BQ of PQ: using alt so some fields have zero boost and some don't */
+ public void testMultiFieldBQofPQ1() throws Exception {
+ qtest("\"w1 w2\" alt:\"w1 w2\"", new int[] { 0 });
+ }
+ public void testMultiFieldBQofPQ2() throws Exception {
+ qtest("\"w1 w3\" alt:\"w1 w3\"", new int[] { 1,3 });
+ }
+ public void testMultiFieldBQofPQ3() throws Exception {
+ qtest("\"w1 w2\"~1 alt:\"w1 w2\"~1", new int[] { 0,1,2 });
+ }
+ public void testMultiFieldBQofPQ4() throws Exception {
+ qtest("\"w2 w3\"~1 alt:\"w2 w3\"~1", new int[] { 0,1,2,3 });
+ }
+ public void testMultiFieldBQofPQ5() throws Exception {
+ qtest("\"w3 w2\"~1 alt:\"w3 w2\"~1", new int[] { 1,3 });
+ }
+ public void testMultiFieldBQofPQ6() throws Exception {
+ qtest("\"w3 w2\"~2 alt:\"w3 w2\"~2", new int[] { 0,1,3 });
+ }
+ public void testMultiFieldBQofPQ7() throws Exception {
+ qtest("\"w3 w2\"~3 alt:\"w3 w2\"~3", new int[] { 0,1,2,3 });
+ }
+
}