读书人

lucene的又一有关问题

发布时间: 2012-07-16 15:44:59 作者: rapoo

lucene的又一问题
这段时间在项目中又发现lucene的一个问题,例如搜索某一个关键词"愤怒的小鸟太空版",在屏蔽lengNorm全命中的情况下,原则上说score值肯定会一样,但是会出现score值不一样的时候,只是之间的差值很小很小,基本上可以忽略不计,可最终也会影响排序,比如5.232345 5.2323448 之间的差值只有0.0000002。
分析lucene源代码发现是在搜索时候idf值不一样导致了结果的不对,由于修改lucene的源代码不太现实,最后的解决办事是扩展Similarity,将idf值的小数点后4位之后的全部去掉,比如值为:5.2323448,改为5.2323扩展源码如下:

        public float idf(int docFreq, int numDocs) {      float idf = (float)(Math.log(numDocs/(double)(docFreq+1)) + 1.0);      idf=(int)(idf*10000)/10000.0000f;      return idf;    }          

这样处理并一定是最好的解决方案,但暂时解决了项目中遇到的问题,如果要完美的解决这个问题,要么等lucene更新,要么自己修改lucene的源代码。

读书人网 >开源软件

热点推荐