ES第十四天-相关度评分原理

在这里插入图片描述
在es中,所有的查询最终都会被转化成bool查询,图上的两种写法的最终效果是一模一样的,match的默认操作符就是or,将转换成bool中的should。如果变成and,则将相当于bool中的must了。
此外,其实我们可以针对should中的某一个子句,进行boost的权重设置:
在这里插入图片描述

TF-IDF

① TF(词频term frequency): 关键词在每个doc中出现的次数
② IDF(反文档词频inversed document frequency):关键词在整个索引中出现的次数
③ norm:字段长度越长,值越小。

空间向量模型

在这里插入图片描述

每个doc根据term的命中情况,会形成一个向量模型,而搜索的语句term本身也会形成一个向量模型,所谓相似度,就是看每个doc与query之间的夹角,夹角越小,说明相关度越高,评分也就越高。

计算公式

比如 query: hello word
① 计算公式:

score(q,d)  =  
            queryNorm(q)  
          · coord(q,d)    
          · ∑ (           
                tf(t in d)   
              · idf(t)²      
              · t.getBoost()
              · norm(t,d)    
            ) (t in q)

1、score(q,d):query对一个doc最终的评分结果。

2、 queryNorm(q):想想normalization,在不影响相互关系的前提下,把看似离散的数据,转换到一个相近的区间=>人性化
a. queryNorm = 1 /√sumOfSquaredWeights
b. sumOfSquaredWeights是通过将查询中每个项的IDF平方相加来计算的。

3、coord(q,d): 对匹配的结果加分,越匹配的doc加分越多
doc with hello→ score: 1.5 * 1 / 3 = 0.5
doc with hello word → score: 3.0 * 2 / 3 = 2.0
doc with hello word elastic → score: 4.5 * 3 / 3 = 4.5
总分数 * 匹配的term数 / 总term数

4、 ∑:doc对query中每个trem的权重的总和

5、 tf(t in d):
a. tf(t in d) = √frequency
b. 该trem在doc中出现的次数的平方根

6、idf(t):
a. idf(t) = 1 + log ( numDocs / (docFreq + 1))
b. trem的反文档频率(idf)是索引中文档数量的对数,除以包含该trem的doc数量

7、t.getBoost():设置的权重值.
8、norm(t,d):字段长度越长,结果月越小
a. norm(d) = 1 / √numTerms
b. 字段长度范数(范数)是字段中项数的平方根的倒数

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值