You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2009/08/27 18:57:28 UTC

svn commit: r808519 - in /lucene/java/trunk: ./ contrib/regex/src/java/org/apache/lucene/search/regex/ src/java/org/apache/lucene/search/ src/test/org/apache/lucene/search/

Author: mikemccand
Date: Thu Aug 27 16:57:27 2009
New Revision: 808519

URL: http://svn.apache.org/viewvc?rev=808519&view=rev
Log:
LUCENE-1860: default all multi-term queries to constant score auto

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/common-build.xml
    lucene/java/trunk/contrib/regex/src/java/org/apache/lucene/search/regex/SpanRegexQuery.java
    lucene/java/trunk/src/java/org/apache/lucene/search/MultiTermQuery.java
    lucene/java/trunk/src/java/org/apache/lucene/search/PrefixQuery.java
    lucene/java/trunk/src/java/org/apache/lucene/search/TermRangeQuery.java
    lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java
    lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanPrefixQuery.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Thu Aug 27 16:57:27 2009
@@ -205,6 +205,12 @@
     The usage of the US locale is important to guarantee correct ordering of
     generated terms.  (Uwe Schindler)
 
+15. LUCENE-1860: MultiTermQuery now defaults to
+    CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method (previously it
+    was SCORING_BOOLEAN_QUERY_REWRITE).  This means that PrefixQuery
+    and WildcardQuery will now produce constant score for all matching
+    docs, equal to the boost of the query.  (Mike McCandless)
+
 API Changes
 
 1. LUCENE-1419: Add expert API to set custom indexing chain. This API is 

Modified: lucene/java/trunk/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/java/trunk/common-build.xml?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/common-build.xml (original)
+++ lucene/java/trunk/common-build.xml Thu Aug 27 16:57:27 2009
@@ -42,7 +42,7 @@
   <property name="Name" value="Lucene"/>
   <property name="dev.version" value="2.9"/>
   <property name="version" value="${dev.version}"/>
-  <property name="compatibility.tag" value="lucene_2_4_back_compat_tests_20090815"/>
+  <property name="compatibility.tag" value="lucene_2_4_back_compat_tests_20090827"/>
   <property name="spec.version" value="${version}"/>	
   <property name="year" value="2000-${current.year}"/>
   <property name="final.name" value="lucene-${name}-${version}"/>

Modified: lucene/java/trunk/contrib/regex/src/java/org/apache/lucene/search/regex/SpanRegexQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/regex/src/java/org/apache/lucene/search/regex/SpanRegexQuery.java?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/contrib/regex/src/java/org/apache/lucene/search/regex/SpanRegexQuery.java (original)
+++ lucene/java/trunk/contrib/regex/src/java/org/apache/lucene/search/regex/SpanRegexQuery.java Thu Aug 27 16:57:27 2009
@@ -50,8 +50,7 @@
   public Query rewrite(IndexReader reader) throws IOException {
     RegexQuery orig = new RegexQuery(term);
     orig.setRegexImplementation(regexImpl);
-
-    // RegexQuery (via MultiTermQuery).rewrite always returns a BooleanQuery
+    orig.setRewriteMethod(RegexQuery.SCORING_BOOLEAN_QUERY_REWRITE);
     BooleanQuery bq = (BooleanQuery) orig.rewrite(reader);
 
     BooleanClause[] clauses = bq.getClauses();

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/MultiTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/MultiTermQuery.java?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/MultiTermQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/MultiTermQuery.java Thu Aug 27 16:57:27 2009
@@ -60,7 +60,7 @@
 public abstract class MultiTermQuery extends Query {
   /* @deprecated move to sub class */
   protected Term term;
-  protected RewriteMethod rewriteMethod = SCORING_BOOLEAN_QUERY_REWRITE;
+  protected RewriteMethod rewriteMethod = CONSTANT_SCORE_AUTO_REWRITE_DEFAULT;
   transient int numberOfTerms = 0;
 
   /** Abstract class that defines how the query is rewritten. */

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/PrefixQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/PrefixQuery.java?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/PrefixQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/PrefixQuery.java Thu Aug 27 16:57:27 2009
@@ -26,13 +26,9 @@
 /** A Query that matches documents containing terms with a specified prefix. A PrefixQuery
  * is built by QueryParser for input like <code>app*</code>.
  *
- * <p><b>NOTE</b>: Currently this query uses {@link
- * MultiTermQuery#SCORING_BOOLEAN_QUERY_REWRITE}, which
- * assigns not-very-useful scores to the resulting hits.  In
- * 3.0 this default will change to {@link
- * MultiTermQuery#CONSTANT_SCORE_AUTO_REWRITE_DEFAULT}; you
- * can use {@link MultiTermQuery#setRewriteMethod} to change
- * it. */
+ * <p>This query uses the {@link
+ * MultiTermQuery#CONSTANT_SCORE_AUTO_REWRITE_DEFAULT}
+ * rewrite method. */
 public class PrefixQuery extends MultiTermQuery {
   private Term prefix;
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/TermRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/TermRangeQuery.java?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/TermRangeQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/TermRangeQuery.java Thu Aug 27 16:57:27 2009
@@ -109,7 +109,6 @@
     this.includeLower = includeLower;
     this.includeUpper = includeUpper;
     this.collator = collator;
-    rewriteMethod = CONSTANT_SCORE_AUTO_REWRITE_DEFAULT;
   }
 
   /** Returns the field name for this query */

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java Thu Aug 27 16:57:27 2009
@@ -30,12 +30,9 @@
  * a Wildcard term should not start with one of the wildcards <code>*</code> or
  * <code>?</code>.
  * 
- * <p><b>NOTE</b>: Currently this query uses {@link
- * MultiTermQuery#SCORING_BOOLEAN_QUERY_REWRITE}, which
- * assigns not-very-useful scores to the resulting hits.  In
- * 3.0 this default will change to {@link
- * MultiTermQuery#CONSTANT_SCORE_AUTO_REWRITE_DEFAULT}; you can use {@link
- * MultiTermQuery#setRewriteMethod} to change it.
+ * <p>This query uses the {@link
+ * MultiTermQuery#CONSTANT_SCORE_AUTO_REWRITE_DEFAULT}
+ * rewrite method.
  *
  * @see WildcardTermEnum */
 public class WildcardQuery extends MultiTermQuery {

Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanPrefixQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanPrefixQuery.java?rev=808519&r1=808518&r2=808519&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanPrefixQuery.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/TestBooleanPrefixQuery.java Thu Aug 27 16:57:27 2009
@@ -53,7 +53,22 @@
     super(name);
   }
 
-  public void testMethod() {
+  private int getCount(IndexReader r, Query q) throws Exception {
+    if (q instanceof BooleanQuery) {
+      return ((BooleanQuery) q).getClauses().length;
+    } else if (q instanceof ConstantScoreQuery) {
+      DocIdSetIterator iter = ((ConstantScoreQuery) q).getFilter().getDocIdSet(r).iterator();
+      int count = 0;
+      while(iter.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
+        count++;
+      }
+      return count;
+    } else {
+      throw new RuntimeException("unepxected query " + q);
+    }
+  }
+
+  public void testMethod() throws Exception {
     RAMDirectory directory = new RAMDirectory();
 
     String[] categories = new String[]{"food",
@@ -63,6 +78,7 @@
 
     Query rw1 = null;
     Query rw2 = null;
+    IndexReader reader = null;
     try {
       IndexWriter writer = new IndexWriter(directory, new
                                            WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
@@ -73,9 +89,8 @@
       }
       writer.close();
       
-      IndexReader reader = IndexReader.open(directory);
+      reader = IndexReader.open(directory);
       PrefixQuery query = new PrefixQuery(new Term("category", "foo"));
-      
       rw1 = query.rewrite(reader);
       
       BooleanQuery bq = new BooleanQuery();
@@ -86,20 +101,7 @@
       fail(e.getMessage());
     }
 
-    BooleanQuery bq1 = null;
-    if (rw1 instanceof BooleanQuery) {
-      bq1 = (BooleanQuery) rw1;
-    }
-
-    BooleanQuery bq2 = null;
-    if (rw2 instanceof BooleanQuery) {
-        bq2 = (BooleanQuery) rw2;
-    } else {
-      fail("Rewrite");
-    }
-
-    assertEquals("Number of Clauses Mismatch", bq1.getClauses().length,
-                 bq2.getClauses().length);
+    assertEquals("Number of Clauses Mismatch", getCount(reader, rw1), getCount(reader, rw2));
   }
 }