如何规范Lucene分数?

时间:2011-03-21 14:38:01

标签: lucene normalization

我需要将Lucene得分标准化为0到1之间。

例如,随机查询返回以下分数......

8.864665
2.792687
2.792687
2.792687
2.792687
0.49009037
0.33730242 
0.33730242 
0.33730242 
0.33730242 

得分最高的是什么? 10.0?

感谢

6 个答案:

答案 0 :(得分:9)

您可以使用最高分数划分所有分数,以获得0到1之间的分数。

但请注意,标准化分数应仅用于比较单个查询的结果。比较两个不同查询的结果的分数(标准化与否)是不正确的。

答案 1 :(得分:5)

没有很好的标准方法来使用lucene来标准化分数。请阅读:ScoresAsPercentages和此explanation

在您的情况下,如果结果按分数排序,则最高分数是第一个结果的分数。但是这个分数对于其他所有查询都会有所不同。

另见how-do-i-normalise-a-solr-lucene-score

答案 2 :(得分:1)

Solr没有最高分,这取决于太多的变量,因此无法预测。

但是你可以实现一种称为标准化分数(Scores As Percentages)的东西,这是不推荐的。

有关详细信息,请参阅相关链接:

Is it possible to set a Solr Score threshold 'reasonably', independent of results returned? (i.e. Is Solr Scoring standardized in any way)

how do I normalise a solr/lucene score?

Remove results below a certain score threshold in Solr/Lucene?

答案 3 :(得分:0)

常规规范化只会帮助您比较查询(以及他们检索到的列表)之间的评分分布。 您不能简单地将分数标准化以比较查询之间的性能。 想象一下所有检索到的文档高度相关并且收到相同(高分)的查询,并且在另一个查询中,检索到的列表包含大麦相关文档(再次,具有相同的分数) - 现在,无论每个查询归一化你做 - 标准化得分将是相同的。

您需要考虑一个可以将所有分数提升到同一水平的交叉查询因子。

例如 - 可能计算查询与整个索引之间的相似性,并以某种方式将该分数与文档分数一起使用

答案 4 :(得分:0)

如果您想比较两个或更多查询,我找到了一种解决方法。 您可以使用 LevenstheinDistance LuceneLevenstheinDistance(Damerau)类将您的最高得分文档与您的查询项进行比较,以获得您的查询项与结果之间的距离。结果是他们之间的相似性。对要比较的每个查询执行此操作。现在,您可以使用querytherm的相似性和最高结果来比较查询。您现在可以选择具有最高分数的查询,并将其用于下一步的正确操作。

    //Damerau LevenstheinDistance
    LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();

    similiarity = d.getDistance(queryterm, yourResult );

答案 5 :(得分:0)

我应用了非线性函数来压缩每个查询。