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 eh...@apache.org on 2006/11/21 01:09:50 UTC

svn commit: r477424 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/WildcardQuery.java src/test/org/apache/lucene/search/TestWildcard.java

Author: ehatcher
Date: Mon Nov 20 16:09:50 2006
New Revision: 477424

URL: http://svn.apache.org/viewvc?view=rev&rev=477424
Log:
LUCENE-543: WildcardQuery without wildcarded term rewrites to a TermQuery

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java
    lucene/java/trunk/src/test/org/apache/lucene/search/TestWildcard.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?view=diff&rev=477424&r1=477423&r2=477424
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Mon Nov 20 16:09:50 2006
@@ -30,6 +30,11 @@
     for range queries. Added useOldRangeQuery property to QueryParser to allow 
     selection of old RangeQuery class if required.      
 
+ 6. LUCENE-543: WildcardQuery now performs a TermQuery if the provided term
+    does not contain a wildcard character (? or *), when previously a
+    StringIndexOutOfBoundsException was thrown.
+    (Michael Busch via Erik Hatcher)
+
 New features
 
  1. LUCENE-503: New ThaiAnalyzer and ThaiWordFilter in contrib/analyzers
@@ -58,7 +63,7 @@
  7. LUCENE-573: QueryParser now allows backslash escaping in
     quoted terms and phrases. (Michael Busch via Yonik Seeley)
 
- 7. LUCENE-716: QueryParser now allows specification of unicode
+ 8. LUCENE-716: QueryParser now allows specification of unicode
     characters in terms via a unicode escape of the form \uXXXX
     (Michael Busch via Yonik Seeley)
 

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?view=diff&rev=477424&r1=477423&r2=477424
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/WildcardQuery.java Mon Nov 20 16:09:50 2006
@@ -31,8 +31,11 @@
  * @see WildcardTermEnum
  */
 public class WildcardQuery extends MultiTermQuery {
+  private boolean termContainsWildcard;
+    
   public WildcardQuery(Term term) {
     super(term);
+    this.termContainsWildcard = (term.text().indexOf('*') != -1) || (term.text().indexOf('?') != -1);
   }
 
   protected FilteredTermEnum getEnum(IndexReader reader) throws IOException {
@@ -44,5 +47,13 @@
       return super.equals(o);
 
     return false;
+  }
+  
+  public Query rewrite(IndexReader reader) throws IOException {
+      if (this.termContainsWildcard) {
+          return super.rewrite(reader);
+      }
+      
+      return new TermQuery(getTerm());
   }
 }

Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestWildcard.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/TestWildcard.java?view=diff&rev=477424&r1=477423&r2=477424
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/search/TestWildcard.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/TestWildcard.java Mon Nov 20 16:09:50 2006
@@ -54,6 +54,21 @@
     assertFalse(wq1.equals(fq));
     assertFalse(fq.equals(wq1));
   }
+  
+  /**
+   * Tests if a WildcardQuery that has no wildcard in the term is rewritten to a single
+   * TermQuery.
+   */
+  public void testTermWithoutWildcard() throws IOException {
+      RAMDirectory indexStore = getIndexStore("field", new String[]{"nowildcard", "nowildcardx"});
+      IndexSearcher searcher = new IndexSearcher(indexStore);
+
+      Query wq = new WildcardQuery(new Term("field", "nowildcard"));
+      assertMatches(searcher, wq, 1);
+
+      wq = searcher.rewrite(wq);
+      assertTrue(wq instanceof TermQuery);
+  }
 
   /**
    * Tests Wildcard queries with an asterisk.