I have committed this fix; no patch is needed. -- George
> -----Original Message----- > From: DIGY [mailto:[EMAIL PROTECTED] > Sent: Thursday, October 25, 2007 2:40 PM > To: lucene-net-dev@incubator.apache.org > Subject: RE: PrefixQuery's rewrite method does not work as > expected when used under .Net 2.0 > > Hi Christopher, > > Can you open an issue on JIRA and attach your patch to it? > > The test case below justifies you. > > void WriteQuery() > { > string sToIndex = "paraaminosyre"; > string sToSearch = "para"; > > Lucene.Net.Store.RAMDirectory ramDir = new > Lucene.Net.Store.RAMDirectory(); > > //INDEX > Lucene.Net.Index.IndexWriter writer = new > Lucene.Net.Index.IndexWriter(ramDir, new > Lucene.Net.Analysis.Standard.StandardAnalyzer()); > Lucene.Net.Documents.Document doc = new > Lucene.Net.Documents.Document(); > doc.Add(new Lucene.Net.Documents.Field("Field1", > sToIndex, Lucene.Net.Documents.Field.Store.YES, > Lucene.Net.Documents.Field.Index.TOKENIZED)); > writer.AddDocument(doc); > writer.Close(); > > //SEARCH > Lucene.Net.Index.IndexReader reader = > Lucene.Net.Index.IndexReader.Open(ramDir); > Lucene.Net.Search.PrefixQuery pq = new > Lucene.Net.Search.PrefixQuery(new > Lucene.Net.Index.Term("Field1", sToSearch )); > Lucene.Net.Search.Query q = pq.Rewrite(reader); > Console.WriteLine("#" + q.ToString() + "#"); > reader.Close(); > } > > public void Test() > { > > System.Threading.Thread.CurrentThread.CurrentCulture = > System.Globalization.CultureInfo.GetCultureInfo("en-us"); > WriteQuery(); > > > System.Threading.Thread.CurrentThread.CurrentCulture = > System.Globalization.CultureInfo.GetCultureInfo("nn-no"); > WriteQuery(); > } > > Output: > #Field1:paraaminosyre# > ## > > > Regards, > > DIGY > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] > On Behalf Of Christopher Kolstad > Sent: Thursday, October 25, 2007 12:02 PM > To: lucene-net-dev@incubator.apache.org > Subject: PrefixQuery's rewrite method does not work as > expected when used under .Net 2.0 > > Hi. > > I'm currently using the latest version from SVN of Lucene.Net > 2.1. When compiling it for .Net 2.0 I ran into an interesting > "feature". > Query expansion stops before expected. After a lot of > debugging, I found the culprit to be PrefixQuery's Rewrite > method. It uses string.StartsWith (string); However in .Net > 2.0 this will then break on any box with different culture > settings than English. Since .Net 2.0 StartsWith has the > overload StartsWith(string, StringComparisonType) and this is > set to default to StringComparison.CurrentCulture > > Norwegian culture for instance states that 'aa' is the same > as the single letter 'å' > > So when my index contains para-orange, paraaminosyre para.... > and I do the PrefixQuery para* > > this method fails on the > if(term.Text().StartsWith(prefixText)) test. on > paraaminosyre.StartsWith(para). > > The fix for me was to change the line in > PrefixQuery.cs::Rewrite() from > > if(term != null && term.Text().StartsWith(prefixText) && > term.Field() == > prefixField) > > to > > if (term != null && term.Text().StartsWith(prefixText, > StringComparison.Ordinal) && term.Field() == prefixField) > > This is a new "feature" in .Net 2.0 and did not affect my > .Net 1.1 projects which still uses the .Net 1.1 library. > > > Conditional compilation might be required. > -- > Regards, > Christopher Kolstad > E-mail: [EMAIL PROTECTED] (University) > [EMAIL PROTECTED] (Home) > [EMAIL PROTECTED] (Job) >