diff --git a/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs b/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs index f63aa4b3b6..580554a9da 100644 --- a/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs +++ b/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs @@ -195,8 +195,48 @@ public virtual void TestFuzziness() reader.Dispose(); directory.Dispose(); } - [Test] + public void TestPrefixLengthEqualStringLength() + { + Directory directory = NewDirectory(); + RandomIndexWriter writer = new RandomIndexWriter(Random, directory); + AddDoc("b*a", writer); + AddDoc("b*ab", writer); + AddDoc("b*abc", writer); + AddDoc("b*abcd", writer); + String multibyte = "아프리카코끼리속"; + AddDoc(multibyte, writer); + IndexReader reader = writer.GetReader(); + IndexSearcher searcher = NewSearcher(reader); + writer.Dispose(); + + int maxEdits = 0; + int prefixLength = 3; + FuzzyQuery query = new FuzzyQuery(new Term("field", "b*a"), maxEdits, prefixLength); + ScoreDoc[] hits = searcher.Search(query, 1000).ScoreDocs; + assertEquals(1, hits.Length); + + maxEdits = 1; + query = new FuzzyQuery(new Term("field", "b*a"), maxEdits, prefixLength); + hits = searcher.Search(query, 1000).ScoreDocs; + assertEquals(2, hits.Length); + + maxEdits = 2; + query = new FuzzyQuery(new Term("field", "b*a"), maxEdits, prefixLength); + hits = searcher.Search(query, 1000).ScoreDocs; + assertEquals(3, hits.Length); + + maxEdits = 1; + prefixLength = multibyte.Length - 1; + query = new FuzzyQuery(new Term("field", multibyte.Substring(0, prefixLength)), maxEdits, prefixLength); + hits = searcher.Search(query, 1000).ScoreDocs; + assertEquals(1, hits.Length); + + reader.DoClose(); + directory.Dispose(); + } + + [Test] public virtual void Test2() { Directory directory = NewDirectory(); @@ -384,4 +424,4 @@ private void AddDoc(string text, RandomIndexWriter writer) writer.AddDocument(doc); } } -} \ No newline at end of file +} diff --git a/src/Lucene.Net/Search/FuzzyQuery.cs b/src/Lucene.Net/Search/FuzzyQuery.cs index 6fafa67f68..60df568aa7 100644 --- a/src/Lucene.Net/Search/FuzzyQuery.cs +++ b/src/Lucene.Net/Search/FuzzyQuery.cs @@ -148,7 +148,7 @@ public FuzzyQuery(Term term) protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) { - if (maxEdits == 0 || prefixLength >= term.Text.Length) // can only match if it's exact + if (maxEdits == 0 ) // can only match if it's exact { return new SingleTermsEnum(terms.GetEnumerator(), term.Bytes); } @@ -262,4 +262,4 @@ public static int SingleToEdits(float minimumSimilarity, int termLen) } } } -} \ No newline at end of file +}