随笔 - 17  文章 - 84  trackbacks - 0
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

如非特别说明,所有文章均为原创。如需引用,请注明出处
Email:liangtianyu@gmail.com
MSN:terry.liangtianyu@hotmail.com

常用链接

留言簿(4)

随笔分类(12)

随笔档案(17)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 51494
  • 排名 - 960

最新评论

阅读排行榜

评论排行榜

      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 阅读(1966) 评论(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
非常感谢!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: