Elasticsearch之相关性评分

一、概念:

     1、相关性:

       确切地说,应该加限定词,应该称作,已匹配到的内容的相关性。通俗地讲,就是已匹配到的内容跟要搜索的词(或句子)像不像。其中,已匹配到的内容,是指那些匹配了部分的搜索词的内容,或者完全和搜索词一模一样,这样就算匹配。而这个“像不像”,有一模一样,9分像,3分像的区别,而这个到底有多像,就是相关性。相关性评分是一个用数字量化的值,值越高,表示相关性越强,和要搜索的内容越接近。

二、计算:

       Elasticsearch 的相关性评分用一个正浮点数字段 _score 来表示。_score 的评分越高,相关性越高。查询语句会为每个文档生成一个 _score 字段用以表示相关性,默认按降序排序。ES早期版本使用的算法是:检索词频率/反向文档频率(即:TF/IDF算法),ES5.0以后使用的算法变成了BM25算法,是TF与IDF的乘积。根据不同的查询条件以及查询条件不同的组合方式,每个查询条件经过BM25算法得到的值会再经过不同的运算最终得到 _score相关性评分。其中:

       TF:Term Frequency,TF = (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)),其中:

              freq: 某个词元在已匹配的某个文档的某个字段上出现的次数;

              k1:系统常量,取值范围为0~3之间,理想范围是0.5~2.0。用来控制匹配到的词元数对TF的影响程度。k1值小,匹配到词元数对TF的影响也就小,ES中默认为1.2;

              b:系统常量,取值范围为0~1之间,理想范围是0.3~0.9。用来控制字段长度fieldLength对score的影响程度。b=0时fieldLength对score无影响,b=1时fieldLength对score达到最大影响。ES 中默认为0.75;

              fieldLength:已匹配的某个文档的某个字段上的词元总数;

              avgFieldLength:已匹配的某个文档所在分片上的所有已匹配的文档的某字段上的平均词元数;

       IDF:IDF = log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)),其中:

               docCount:已匹配的某个文档所在分片上的所有文档总数;

               docFreq:已匹配的某个文档所在分片上的已匹配的文档总数;

三、常用API:

       1、  查看相关性得分的计算明细:

GET http://$user:$passwd@$host:$port/$index/$type/_search
{
    "explain": true,
    "query":{
        查询条件
    }
}

 

你可能感兴趣的:(检索,召回率,相关性,评分,准确率,TF/IDF)