2

我有一个使用 lucene 进行搜索的应用程序。搜索空间以千计。搜索这数千个结果,我只得到几个结果,大约 20 个(这是可以预期的)。

但是,当我将搜索空间减少到仅这 20 个条目时(即,我只索引了这 20 个条目并忽略其他所有内容......这样开发会更容易),我得到相同的 20 个结果,但顺序不同(和评分) .

我尝试通过 Field#setOmitNorms(true) 禁用规范因子,但我仍然得到不同的结果?

什么可能导致得分的差异?

谢谢

4

2 回答 2

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);
}
于 2009-11-16T13:37:14.440 回答
2

评分取决于索引中的所有文档:

一般来说,向量空间模型 (VSM) 背后的思想是,一个查询词在文档中出现的次数相对于该词在集合中所有文档中出现的次数越多,该文档与查询的相关性就越高.

来源:Apache Lucene - 评分

于 2009-11-16T13:34:03.917 回答