search - 我如何对solr/lucene分数进行归一化?

标签 search lucene solr normalization tf-idf

我正在尝试找出如何提高solr搜索结果的得分。我的应用程序需要从solr结果中获取分数,并根据查询结果的好坏来显示一些“星星”。 5颗星=几乎/精确到0颗星,这意味着与搜索不完全匹配,例如只有一个元素命中。但是我得到的分数从1.4到0.8660254都返回了我将给5星的结果。我需要做的是以某种方式将这些结果转换为一定百分比,以便我可以用正确的星数标记这些结果。

我运行的查询给出的1.4分是:

euallowed:true AND(等级:“ 2:1”)

给我0.8660254分数的查询是:

euallowed:true AND(等级:“ 2:1”或等级:“ 1st”)

我已经更新了相似性,以便tf和idf返回1.0,因为我只在文档中有术语而不是文档中该术语编号的情况下才感兴趣。这是我的相似性代码如下所示:

import org.apache.lucene.search.Similarity;

public class StudentSearchSimilarity extends Similarity {

    @Override
    public float lengthNorm(String fieldName, int numTerms) {
        return (float) (1.0 / Math.sqrt(numTerms));
    }

    @Override
    public float queryNorm(float sumOfSquaredWeights) {

        return (float) (1.0 / Math.sqrt(sumOfSquaredWeights));

    }

    @Override
    public float sloppyFreq(int distance) {
        return 1.0f / (distance + 1);
    }

    @Override
    public float tf(float freq) {
        return (float) 1.0;
    }

    @Override
    public float idf(int docFreq, int numDocs) {

        //return (float) (Math.log(numDocs / (double) (docFreq + 1)) + 1.0);
        return (float)1.0;

    }

    @Override
    public float coord(int overlap, int maxOverlap) {
        return overlap / (float) maxOverlap;
    }
}


所以我想我的问题是:


标准化的最佳方法是什么
分数,以便我可以算出
有多少“明星”能给?
还有另一种得分方式
结果?


谢谢

格兰特

最佳答案

引用http://wiki.apache.org/lucene-java/ScoresAsPercentages


人们经常想从Lucene分数中计算出“百分比”,以确定什么是“ 100%完美”匹配与“ 50%”匹配。这也叫做“归一化分数”

不要这样

说真的停止尝试以这种方式思考您的问题,这不会很好地结束。


该页面确实提供了一个示例,说明您在理论上如何做到这一点,但这非常困难。

关于search - 我如何对solr/lucene分数进行归一化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986220/

相关文章:

java - 在 Solr 中查询

c# - 如何在 C#/ASP.NET MVC 中实现搜索功能

php - 如何在 InnoDB 中实现全文搜索?

linux - 每行搜索一次匹配项

java - Lucene的FloatField和FloatDocValuesField有什么区别?

c# - 使用 NEST C# 客户端的 ElasticSearch 重音不敏感查询

solr - Cassandra 和SOLR?什么为前端读取查询提供了更好的性能?

algorithm - 元搜索 - 删除具有不同分辨率的重复图片 - 改进当前方法

lucene - 如何让 Lucene QueryParser 更宽容?

c# - 您可以将更新 URL 上的软提交传递给 SOLR 吗?