分析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的源代码。