同福

Elasticsearch评分算法

介绍

介绍

福哥研究了一下Elasticsearch的打分算法,跟大家讨论一下

ES在进行文档匹配评分的时候分为三个步骤

  • Boolean Model

  • TF/IDF

  • Vector Space Model

下面我们就来一一了解 一下

教程

Boolean Model

所谓布尔模型就是对文档进行一次YES/NO的判断,关键词的任何一个分词命中文档的任何一个字段Boolean Model即为真(true),否则为假(false)

此时并不进行打分操作

TF/IDF

TF

TF就是term frequency的简写,称之为词频算法,意思是计算关键词的所有分词在文档的命中次数,次数越多,此项得分就越高

示例1:

关键词为 “福哥爱编程”

文档1内容 “大家都叫我福哥,我很喜欢编程”

文档2内容 “大家都叫我福哥,我是个程序员”

可以看到,文档1命中了“福哥”和“编程”两个词,文档2命中了“福哥”一个词,所以此项得分文档1的分数会高于文档2

IDF

IDF就是inverse document frequency的简写,称之为逆文本频率指数算法,意思是计算关键词的所有分词在所有已扫描的文档中命中的次数,次数越多,该分词得分在汇总文档得分时候所占的比重也就越低

示例1:

关键词为 “程序员编程”

文档1内容 “大家都叫我福哥,我很喜欢编程”

文档2内容 “大家都叫我福哥,我是个程序员”

可以看到,文档1命中了“编程,文档2命中了“程序员”,假设目前已扫描过的文档中命中“编程”50次,命中“程序员”5次,那么此项得分文档2的分数会高于文档1

LM

LM就是lengh norm的简写,称之为长度算法,意思是计算关键词匹配的文档的文本长度,长度越短 ,得分越高

这个很容易理解,文本长度短了命中概率就低,在低概率情况下还被命中了,证明文档针对性很强,价值也就更高,自然得分也就越高了

Vector Space Model

Vector Space Model空间向量算法,这个用来将关键词的所有分词通过TF/IDF算法得出的所有得分汇总成一个得分,用来表示文档的最终权重得分

这个理解起来有点复杂,福哥简单地说明一下,通过TF/IDF得出一个文档一系列的得分weight-1, weight-2, weight-3 ... weight-n,把关键词也作为一个文档的话,也可以得出一系列的得分,很显然关键词自己的得分必然是最高的(全部命中),那么通过将这两组权重值转换成向量线之后,会发现文档的向量线会无限接近关键词的向量线,那么越接近就说明文档越匹配关键词,文档的最终权重得分也就越高

通过这种方法,就可以算出每个文档的权重分数了

分析总结

根据前面的算法基础知识福哥总结出了一些比较直观的影响查询结果的权重得分的因素

加分条件

  • 字符串长度:匹配的字段的字符串长度越小,打分越高(LM)

  • 关键词频次:关键词出现的频次越多,打分越高(TF)

  • 专业词数量:文档中的专业词越多,得到高分的概率越高(IDF)

加分影响力度

  • 字符串长度:★

  • 关键词频次

  • 专业词数量☆☆

多字段匹配

在多个字段中进行匹配的话,最终文档打分是所有字段评分和取平均值,即:avg(字段1评分+字段2评分+字段3评分+...+字段n评分)

小数点

关键词前后是小数点的时候,关键词不会被匹配到