mirror of https://github.com/apache/lucene.git
LUCENE-543: WildcardQuery without wildcarded term rewrites to a TermQuery
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@477424 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
cd39647656
commit
c44be0c446
|
@ -30,6 +30,11 @@ Changes in runtime behavior
|
|||
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 @@ New features
|
|||
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)
|
||||
|
||||
|
|
|
@ -31,8 +31,11 @@ import java.io.IOException;
|
|||
* @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 {
|
||||
|
@ -45,4 +48,12 @@ public class WildcardQuery extends MultiTermQuery {
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
public Query rewrite(IndexReader reader) throws IOException {
|
||||
if (this.termContainsWildcard) {
|
||||
return super.rewrite(reader);
|
||||
}
|
||||
|
||||
return new TermQuery(getTerm());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,21 @@ public class TestWildcard
|
|||
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.
|
||||
|
|
Loading…
Reference in New Issue