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; }