我有一个使用lucene进行搜索的应用程序。搜索空间数以千计。搜索成千上万的搜索结果,我只得到了一些结果,大约20个(这是可以预期的)。
然而,当我将我的搜索空间减少到只有那20个条目时(即我只将那20个条目编入索引并忽略其他所有内容......这样开发会更容易),我得到相同的20个结果但是顺序不同(和得分)。
我尝试通过Field #setOmitNorms(true)禁用规范因子,但我仍然得到不同的结果?
什么可能导致得分差异?
由于
答案 0 :(得分:5)
请参阅Lucene的Similarity API中的评分文档。我敢打赌这两种情况之间的idf差异(numDocs和docFreq都不同)。为了确定,请使用explain()函数调试分数。
编辑:用于获取解释的代码片段:
TopDocs hits = searcher.search(query, searchFilter, max);
ScoreDoc[] scoreDocs = hits.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
String explanation = searcher.explain(query, scoreDoc.doc).toString();
Log.debug(explanation);
}
答案 1 :(得分:2)
评分取决于索引中的所有文件:
总的来说,背后的想法 向量空间模型(VSM)就是更多 查询词出现在一个中的时间 文件相对数量 这个词出现在所有的时代 集合中的文档,该文档与查询的相关性越高。