隨筆 - 17  文章 - 84  trackbacks - 0
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          如非特別說明,所有文章均為原創。如需引用,請注明出處
          Email:liangtianyu@gmail.com
          MSN:terry.liangtianyu@hotmail.com

          常用鏈接

          留言簿(4)

          隨筆分類(12)

          隨筆檔案(17)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 51902
          • 排名 - 962

          最新評論

          閱讀排行榜

          評論排行榜

                Lucene.Net 2.1版本還沒有正式發布,但可以從SVN中下載獲得。在此版本中,當對Java版本建立的索引文檔進行搜索時,會有異常拋出。經過我調試和對比,發現是因為Java中Long.parseLong(String s,int radix),Long.toString(long i,int radix)與.Net中的Convert.ToInt64(String,int32),Convert.ToString(int64,int32)是不同的。具體差異請查找相關文檔,下面我只給出解決方案。
                在Lucene.Net 2.1工程中的SupportClass.cs中添加如下代碼:

                 //實現Java的Long.parseLong(String s,int radix)

                   public static Int64 ConvertToInt64(string s, int fromBase)
                   {
                        Int64 result = 0;

                        for (int i = (s.Length-1),j=0; i >=0; i--,j++)
                        {
                            char ch = char.ToLower(s[i]);

                            int v = char.IsDigit(ch)==true?int.Parse(ch.ToString()):(10+(int)(ch-'a'));

                            result = result + Convert.ToInt64(v * Math.Pow(fromBase, j));
                        }

                        return result;
                    }


                //實現Java的Long.toString(long i,int radix)
                
                public static string ConvertToString(long l, int fromBase)
                {
                        int maxP =(int) Math.Floor(Math.Log(l,fromBase));
                        int maxN = (int)Math.Floor(l / Math.Pow(fromBase, maxP));

                        char[] chs = new char[maxP+1];

                        chs[0] = (maxN >= 0 && maxN <= 9) ? char.Parse(maxN.ToString()) : (char)((int)('a')+(maxN - 10));

                        long n1 = (long)(l - maxN*Math.Pow(fromBase, maxP));
                        long temp=n1;

                        for (int i = (maxP-1),j=1; i >= 0;i--,j++)
                        {
                            int n2 = (int)Math.Floor(temp/Math.Pow(fromBase,i));

                            chs[j]=(n2>=0 && n2<=9)?char.Parse(n2.ToString()):(char)((int)('a')+(n2-10));

                            temp=(long)(temp-n2*Math.Pow(fromBase,i));
                        }

                        return new string(chs);
                    }

                 這樣替換Lucene.Net中的相關代碼,就可以了。而且經過測試,發現.Net版本的查詢速度比Java版本的快很多,很搞不清楚。

          posted on 2007-05-15 17:16 Terry Liang 閱讀(1979) 評論(6)  編輯  收藏 所屬分類: Lucene 2.1研究

          FeedBack:
          # re: 基于Lucene 2.1的研究:Lucene.Net版本Bug修改 2007-07-11 13:35 regedit
          請問哪里有2.1版下載?給偶一個吧?
          regedit.email@gmail.com  回復  更多評論
            
          # re: 基于Lucene 2.1的研究:Lucene.Net版本Bug修改 2007-07-11 14:00 Terry Liang
          # re: 基于Lucene 2.1的研究:Lucene.Net版本Bug修改 2007-07-14 14:06 regedit
          怎么下載?有沒有打包后的文件?  回復  更多評論
            
          # re: 基于Lucene 2.1的研究:Lucene.Net版本Bug修改 2007-07-16 07:46 Terry Liang
          @regedit
          我就是一個一個文件下的  回復  更多評論
            
          # re: 基于Lucene 2.1的研究:Lucene.Net版本Bug修改 2007-08-31 00:02 小S
          裝一個TortoiseSVN 啥都搞定  回復  更多評論
            
          # re: 基于Lucene 2.1的研究:Lucene.Net版本Bug修改 2007-08-31 07:59 Terry Liang
          @小S
          非常感謝!  回復  更多評論
            
          主站蜘蛛池模板: 弋阳县| 天台县| 屏东县| 木里| 淮滨县| 南漳县| 越西县| 井陉县| 宣化县| 科技| 凉城县| 龙口市| 博白县| 霍邱县| 栖霞市| 东至县| 德惠市| 南投市| 会宁县| 辉南县| 依兰县| 秀山| 阳信县| 柳林县| 高清| 增城市| 虹口区| 县级市| 静安区| 上思县| 公主岭市| 长顺县| 澜沧| 武川县| 牡丹江市| 徐汇区| 宁陵县| 田阳县| 富顺县| 十堰市| 鹤庆县|