Hi Digy, Thanks for looking into this issue. Can you submit a patch? It's best if you open an issue on JIRA and attach the patch to it.
Regards, -- George > -----Original Message----- > From: Digy [mailto:[EMAIL PROTECTED] > Sent: Thursday, April 19, 2007 2:30 PM > To: [email protected] > Subject: RE: Exception while search in Lucene.Net and Index > prepared by LuceneJava > > Hi All, > > NumberTools class is different in Lucene(Java) and Lucene.Net. > "RADIX" is 36 in lucene and 16 in Lucene.Net. Therefore > Java-Index is not compatible with .NET index. > > I will propose a solution for this(I marked the changes as > //DIGY *******). > > Best Regards, > DIGY > > > public class NumberTools > { > > #region BASE36 OPS //DIGY ********** New > static string digits = "0123456789abcdefghijklmnopqrstuvwxyz"; > static long[] powersOf36 = > { 1L, > 36L, > 36L*36L, > 36L*36L*36L, > 36L*36L*36L*36L, > 36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L, > 36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L*36L > }; > > > public static string ToString(long lval) > { > int maxStrLen = powersOf36.Length; > long curval = lval; > > char[] tb = new char[maxStrLen]; > int outpos = 0; > for (int i = 0; i < maxStrLen; i++) > { > long pval = powersOf36[maxStrLen - i - 1]; > int pos = (int)(curval / pval); > tb[outpos++] = digits.Substring(pos, > 1).ToCharArray()[0]; > curval = curval % pval; > } > if (outpos == 0) tb[outpos++] = '0'; > return new string(tb, 0, outpos).TrimStart('0'); > } > > public static long ToLong(string t) > { > long ival = 0; > char[] tb = t.ToCharArray(); > for (int i = 0; i < tb.Length; i++) > { > ival += powersOf36[i] * > digits.IndexOf(tb[tb.Length - i - 1]); > } > return ival; > } > #endregion > > > > private const int RADIX = 36; //DIGY ********** Changed > > private const char NEGATIVE_PREFIX = '-'; > > // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX > private const char POSITIVE_PREFIX = '0'; > > //NB: this must be less than > /// <summary> Equivalent to > longToString(Long.MIN_VALUE)</summary> > public static readonly System.String MIN_STRING_VALUE > = NEGATIVE_PREFIX + "0000000000000"; > > /// <summary> Equivalent to > longToString(Long.MAX_VALUE)</summary> > public static readonly System.String MAX_STRING_VALUE > = POSITIVE_PREFIX + "1y2p0ij32e8e7"; > > /// <summary> The length of (all) strings returned by > [EMAIL PROTECTED] #longToString}</summary> > public static readonly int STR_SIZE = MIN_STRING_VALUE.Length; > > /// <summary> Converts a long to a String suitable > for indexing.</summary> > public static System.String LongToString(long l) > { > > if (l == System.Int64.MinValue) > { > // special case, because long is not symetric > around zero > return MIN_STRING_VALUE; > } > > System.Text.StringBuilder buf = new > System.Text.StringBuilder(STR_SIZE); > > if (l < 0) > { > buf.Append(NEGATIVE_PREFIX); > l = System.Int64.MaxValue + l + 1; > } > else > { > buf.Append(POSITIVE_PREFIX); > } > System.String num = ToString(l); //DIGY ********** Changed > > int padLen = STR_SIZE - num.Length - buf.Length; > while (padLen-- > 0) > { > buf.Append('0'); > } > buf.Append(num); > > return buf.ToString(); > } > > /// <summary> Converts a String that was returned by > [EMAIL PROTECTED] #longToString} back to a > /// long. > /// > /// </summary> > /// <throws> IllegalArgumentException </throws> > /// <summary> if the input is null > /// </summary> > /// <throws> NumberFormatException </throws> > /// <summary> if the input does not parse > (it was not a > String returned by > /// longToString()). > /// </summary> > public static long StringToLong(System.String str) > { > if (str == null) > { > throw new > System.NullReferenceException("string cannot be null"); > } > if (str.Length != STR_SIZE) > { > throw new System.FormatException("string is > the wrong size"); > } > > if (str.Equals(MIN_STRING_VALUE)) > { > return System.Int64.MinValue; > } > > char prefix = str[0]; > long l = ToLong(str.Substring(1)); //DIGY > ********** Changed > > if (prefix == POSITIVE_PREFIX) > { > // nop > } > else if (prefix == NEGATIVE_PREFIX) > { > l = l - System.Int64.MaxValue - 1; > } > else > { > throw new System.FormatException("string does > not begin with the correct prefix"); > } > > return l; > } > } > > -----Original Message----- > From: George Aroush [mailto:[EMAIL PROTECTED] > Sent: Wednesday, April 18, 2007 4:14 AM > To: [email protected] > Subject: RE: Exception while search in Lucene.Net and Index > prepared by LuceneJava > > Hi Laxmilal, > > I don't have the free cycles to look into this right now. > However, now that you narrowed this down to one field, > "CellNo", can you narrow it down even further to one document > or does it not matter? Also, can you try Field.Store.NO > instead of Field.Store.YES ? > > Regards, > > -- George > > > -----Original Message----- > > From: Laxmilal Menaria [mailto:[EMAIL PROTECTED] > > Sent: Monday, April 16, 2007 5:26 AM > > To: [email protected] > > Subject: Re: Exception while search in Lucene.Net and Index > prepared > > by LuceneJava > > > > I have reindex the same, and got exception while > reading..also posted > > sample java program for indexing and vb.net for reading.. > > > > Thanks > > --LM > > > > On 4/15/07, Laxmilal Menaria <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > On 4/13/07, Laxmilal Menaria <[EMAIL PROTECTED]> wrote: > > > > > > > > JAVA CODE : > > > > > > > > import java.io.*; > > > > import java.util.Date; > > > > > > > > import org.apache.lucene.analysis.standard.*; > > > > import org.apache.lucene.document.*; import > > > > org.apache.lucene.index.*; > > > > > > > > public class Indexer { > > > > public static void main(String[] args) { > > > > try > > > > { > > > > > > > > File indexDir = new File("C:/LuceneApp/Testindex"); > > > > long start = new Date().getTime(); > > > > int numIndexed = index(indexDir); > > > > long end = new Date().getTime(); > > > > System.out.println("Indexing " + numIndexed + > > " docs took " > > > > + (end - start) + " milliseconds"); > > > > > > > > }catch(Exception e) > > > > { > > > > System.out.println("Exception by > > main=>"+e.toString()); > > > > } > > > > > > > > } > > > > // open an index and start file directory traversal > > > > public static int index(File indexDir) throws IOException > > > > { > > > > System.out.println("Entering into Index method"); > > > > IndexWriter writer = new IndexWriter(indexDir,new > > > > StandardAnalyzer(), true); > > > > writer.setUseCompoundFile(false); > > > > > > > > indexFile(writer); > > > > int numIndexed = writer.docCount(); > > > > writer.optimize(); > > > > writer.close(); > > > > return numIndexed; > > > > > > > > } > > > > private static void indexFile(IndexWriter writer) > > > > { > > > > try > > > > { > > > > Document doc = new Document(); > > > > doc.add(new Field("CellNo", > NumberTools.longToString > > > > (12345678),Field.Store.YES,Field.Index.TOKENIZED)); > > > > writer.addDocument(doc); > > > > > > > > doc = new Document(); > > > > doc.add(new Field("CellNo", > NumberTools.longToString > > > > (234569455),Field.Store.YES,Field.Index.TOKENIZED)); > > > > writer.addDocument(doc); > > > > > > > > doc = new Document(); > > > > doc.add(new Field("CellNo", > NumberTools.longToString > > > > (567895000),Field.Store.YES,Field.Index.TOKENIZED)); > > > > writer.addDocument(doc); > > > > > > > > doc = new Document(); > > > > doc.add(new Field("CellNo", > NumberTools.longToString > > > > (789511111),Field.Store.YES,Field.Index.TOKENIZED)); > > > > writer.addDocument(doc); > > > > > > > > doc = new Document(); > > > > doc.add(new Field("CellNo", > NumberTools.longToString > > > > (455656448),Field.Store.YES,Field.Index.TOKENIZED)); > > > > writer.addDocument(doc); > > > > } > > > > catch(Exception e) > > > > { > > > > System.out.println("Exception =>"+ e.toString()); > > > > } > > > > > > > > > > > > } > > > > } > > > > > > > > VB.NET CODE: > > > > > > > > Dim objIndexReader As Lucene.Net.Index.IndexReader = > > > > Lucene.Net.Index.IndexReader.Open("C:\LuceneApp\Testindex") > > > > Dim sResults() As String > > > > Dim iTotalDocs As Integer = objIndexReader.NumDocs > > > > Dim iCounter As Integer > > > > While iCounter < iTotalDocs > > > > ReDim Preserve sResults(iCounter) > > > > sResults(iCounter) = > > > > > > Lucene.Net.Documents.NumberTools.StringToLong(objIndexReader.Documen > > > > t > > > > (iCounter).Get("CellNo")) > > > > iCounter += 1 > > > > End While > > > > > > > > On 4/13/07, Laxmilal Menaria <[EMAIL PROTECTED] > wrote: > > > > > > > > > > ok..thanks, I will post sample of both .. > > > > > > > > > > -LM > > > > > > > > > > > > > > > On 4/13/07, George Aroush <[EMAIL PROTECTED] > wrote: > > > > > > > > > > > > Hi Laxmilal, > > > > > > > > > > > > Can you re-index with one field at a time and see > which field > > > > > > maybe the cause? I'm betting it's the one you are storing > > > > > > NumberTools.StringToLong. > > > > > > > > > > > > Also, can you post the sample Java code? > > > > > > > > > > > > Thanks! > > > > > > > > > > > > -- George > > > > > > > > > > > > > -----Original Message----- > > > > > > > From: Laxmilal Menaria [mailto: [EMAIL PROTECTED] > > > > > > > Sent: Friday, April 13, 2007 7:09 AM > > > > > > > To: [email protected] > > > > > > > Subject: Exception while search in Lucene.Net and Index > > > > > > > prepared by LuceneJava > > > > > > > > > > > > > > Hello everyone, > > > > > > > > > > > > > > I have created Index using MyJava program..but > when I have > > > > > > > search using .Net code, it gives exception > > "Run-time exception > > > > > > > thrown : > > > > > > > System.FormatException- string is the wrong size ".. > > > > > > > > > > > > > > MyIndexCollection have 3 Fileds: Name, Address > and Cell No. > > > > > > > and I am index Cell No as NumberTools.LongtoString, > > and while > > > > > > > reading convert to NumberTools.StringToLong, its > working in > > > > > > > java, but when created same with Lucene.net, it > gives above > > > > > > > exception.. > > > > > > > > > > > > > > What is the problem? Please suggest me... > > > > > > > > > > > > > > My lucene version in both Java and .Net is 2.0. > > > > > > > > > > > > > > Thanks in advance, > > > > > > > Laxmilal > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
