This is an automated email from the ASF dual-hosted git repository.

paulirwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git


The following commit(s) were added to refs/heads/master by this push:
     new 98af2bb00 FuzzyQuery produces a wrong result when prefix is equal to 
the term length (#1002)
98af2bb00 is described below

commit 98af2bb00e22827a6c9ab73b2f4c5cab6b6b5bd2
Author: Paul Irwin <[email protected]>
AuthorDate: Mon Nov 4 09:46:53 2024 -0700

    FuzzyQuery produces a wrong result when prefix is equal to the term length 
(#1002)
    
    * FuzzyQuery produces a wrong result when prefix is equal to the term
    length
    https://github.com/apache/lucenenet/issues/941
    
    * Add LUCENENET-specific backport comment, fix test code style
    
    ---------
    
    Co-authored-by: tohidemyname <tohidemyname>
---
 src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs | 44 ++++++++++++++++++++++++++-
 src/Lucene.Net/Search/FuzzyQuery.cs           |  5 +--
 2 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs 
b/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs
index f63aa4b3b..6f8a8c81a 100644
--- a/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs
+++ b/src/Lucene.Net.Tests/Search/TestFuzzyQuery.cs
@@ -196,6 +196,48 @@ namespace Lucene.Net.Search
             directory.Dispose();
         }
 
+        // LUCENENET-specific: backported fix from Lucene 9.0.0 
(lucene@45611d0, LUCENE-9365)
+        [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);
+            const string multibyte = "아프리카코끼리속"; // LUCENENET-specific: made 
const
+            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.Dispose();
+            directory.Dispose();
+        }
+
         [Test]
         public virtual void Test2()
         {
@@ -384,4 +426,4 @@ namespace Lucene.Net.Search
             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 6fafa67f6..a9f8cdf57 100644
--- a/src/Lucene.Net/Search/FuzzyQuery.cs
+++ b/src/Lucene.Net/Search/FuzzyQuery.cs
@@ -148,7 +148,8 @@ namespace Lucene.Net.Search
 
         protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource 
atts)
         {
-            if (maxEdits == 0 || prefixLength >= term.Text.Length) // can only 
match if it's exact
+            // LUCENENET-specific: backported fix from Lucene 9.0.0 
(lucene@45611d0, LUCENE-9365)
+            if (maxEdits == 0) // can only match if it's exact
             {
                 return new SingleTermsEnum(terms.GetEnumerator(), term.Bytes);
             }
@@ -262,4 +263,4 @@ namespace Lucene.Net.Search
             }
         }
     }
-}
\ No newline at end of file
+}

Reply via email to