mirror of https://github.com/apache/lucene.git
LUCENE-1124: make sure FuzzyQuery matches the exact term
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@826013 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
74b190f4b7
commit
ad6bbdd02e
|
@ -87,6 +87,9 @@ Bug fixes
|
|||
BooleanScorer for scoring), whereby some matching documents fail to
|
||||
be collected. (Fulin Tang via Mike McCandless)
|
||||
|
||||
* LUCENE-1124: Make sure FuzzyQuery always matches the precise term.
|
||||
(stefatwork@gmail.com via Mike McCandless)
|
||||
|
||||
New features
|
||||
|
||||
* LUCENE-1933: Provide a convenience AttributeFactory that creates a
|
||||
|
|
|
@ -126,8 +126,8 @@ public class FuzzyQuery extends MultiTermQuery {
|
|||
|
||||
@Override
|
||||
public Query rewrite(IndexReader reader) throws IOException {
|
||||
if(!termLongEnough) { // can't match
|
||||
return new BooleanQuery();
|
||||
if(!termLongEnough) { // can only match if it's exact
|
||||
return new TermQuery(term);
|
||||
}
|
||||
|
||||
FilteredTermEnum enumerator = getEnum(reader);
|
||||
|
|
|
@ -19,13 +19,18 @@ package org.apache.lucene.search;
|
|||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.apache.lucene.analysis.WhitespaceAnalyzer;
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.document.Field;
|
||||
import org.apache.lucene.index.IndexWriter;
|
||||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.store.RAMDirectory;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.store.MockRAMDirectory;
|
||||
import org.apache.lucene.queryParser.QueryParser;
|
||||
|
||||
/**
|
||||
* Tests {@link FuzzyQuery}.
|
||||
|
@ -281,6 +286,43 @@ public class TestFuzzyQuery extends LuceneTestCase {
|
|||
assertEquals(0, hits.length);
|
||||
}
|
||||
|
||||
public void testGiga() throws Exception {
|
||||
|
||||
StandardAnalyzer analyzer = new StandardAnalyzer();
|
||||
|
||||
Directory index = new MockRAMDirectory();
|
||||
IndexWriter w = new IndexWriter(index, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
|
||||
|
||||
addDoc("Lucene in Action", w);
|
||||
addDoc("Lucene for Dummies", w);
|
||||
|
||||
//addDoc("Giga", w);
|
||||
addDoc("Giga byte", w);
|
||||
|
||||
addDoc("ManagingGigabytesManagingGigabyte", w);
|
||||
addDoc("ManagingGigabytesManagingGigabytes", w);
|
||||
|
||||
addDoc("The Art of Computer Science", w);
|
||||
addDoc("J. K. Rowling", w);
|
||||
addDoc("JK Rowling", w);
|
||||
addDoc("Joanne K Roling", w);
|
||||
addDoc("Bruce Willis", w);
|
||||
addDoc("Willis bruce", w);
|
||||
addDoc("Brute willis", w);
|
||||
addDoc("B. willis", w);
|
||||
IndexReader r = w.getReader();
|
||||
w.close();
|
||||
|
||||
Query q = new QueryParser("field", analyzer).parse( "giga~0.9" );
|
||||
|
||||
// 3. search
|
||||
IndexSearcher searcher = new IndexSearcher(r);
|
||||
ScoreDoc[] hits = searcher.search(q, 10).scoreDocs;
|
||||
assertEquals(1, hits.length);
|
||||
assertEquals("Giga byte", searcher.doc(hits[0].doc).get("field"));
|
||||
r.close();
|
||||
}
|
||||
|
||||
private void addDoc(String text, IndexWriter writer) throws IOException {
|
||||
Document doc = new Document();
|
||||
doc.add(new Field("field", text, Field.Store.YES, Field.Index.ANALYZED));
|
||||
|
|
Loading…
Reference in New Issue