Skip to content

Commit

Permalink
FuzzyQuery produces a wrong result when prefix is equal to the term
Browse files Browse the repository at this point in the history
length
#941
  • Loading branch information
tohidemyname authored and paulirwin committed Oct 29, 2024
1 parent 1e6d122 commit 75f9974
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 4 deletions.
44 changes: 42 additions & 2 deletions src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -384,4 +424,4 @@ private void AddDoc(string text, RandomIndexWriter writer)
writer.AddDocument(doc);
}
}
}
}
4 changes: 2 additions & 2 deletions src/Lucene.Net/Search/FuzzyQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -262,4 +262,4 @@ public static int SingleToEdits(float minimumSimilarity, int termLen)
}
}
}
}
}

0 comments on commit 75f9974

Please sign in to comment.