Elasticsearch应用(八)
1.为什么需要相关性算分
我们在文档搜索的时候,匹配程度越高的相关性算分越高,算分越高的越靠前,但是有时候我们不需要算分越高越靠前我们可能需要手动影响算分来控制顺序比如广告(百度竞价),在ES中可以通过fuction score来手动控制算分
2.用户关心的搜索结果的相关性
- 是否可以找到所有相关的内容
- 有多少不相关的内容被返回了
- 文档的打分是否合理
- 结合业务需求,平衡结果排名
3.如何衡量相关性
- Precision(查准率):尽可能返回较少的无关文档
- Recall(查全率):尽量返回较多的相关文档
- Ranking :是否能够按照相关度进行排序
4.什么是相关性(Relevance)
搜索的相关性算分,描述了一个文档和查询语句匹配的程度。ES 会对每个匹配查询条件的结果进行算分_score。打分的本质是排序,需要把最符合用户需求的文档排在前面。ES 5之前,默认的相关性算分采用TF-IDF,现在采用BM 25
5.TF-IDF与BM25算法对比
6.相关概念
词频TF(Term Frequency)
检索词在一篇文档中出现的概率等于检索词出现的次数除以文档的总字数
Stop Word
“的”在文档中出现了很多次,但是对贡献相关度几乎没用,不应该考虑他们的TF
DF
代表检索词在所有文档中出现的频率
逆向文本频率(Inverse Document Frequency)
简单说就是,log(全部文档数/检索词出现过的文档总数)
字段长度归一值(field-length norm)
字段的长度是多少?字段越短,字段的权重越高。检索词出现在一个内容短的title要比同样的词出现在一个内容长的content字段权重更大
度量一条查询和结果文档相关性的简单方法
将搜索中的每一个词的TF相加
7.TF-IDF算法
介绍
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术
TF-IDF被公认为是信息检索领域最重要的发明,除了在信息检索,在文献分类和其他先关领域也有着非常广泛的应用
历史
IDF的概念,最早是剑桥大学的“斯巴克.琼斯”提出
1972年“关键词特殊性的统计解释和它在文献检索中的应用”,但是没有从理论上解释IDF应该是用log(全部文档数/检索词出现过的文档总数),而不是其他函数,也没有做进一步的研究
1970,1980年代萨尔顿和罗宾逊,进行了进一步的证明和研
究,并用香农信息论做了证明
现代搜索引擎,对TF-IDF进行了大量细微的优化,本质上就是将TF求和变成了加权求和
Lucene中的TF-IDF的评分公式
8.BM25算法
介绍
BM25 就是对 TF-IDF 算法的改进,对于 TF-IDF 算法,TF(t)部分的值越大,整个公式返回的值就会越大。BM25 就针对这点进行来优化,随着TF(t) 的逐步加大,该算法的返回值会趋于一个数值
公式
9.通过explain查看TF-IDF
GET /[index]/_search
{
"explain":true,
"query":{
"match":{
"content":"elasticsearch"
}
}
}
10.Boosting
什么是Boosting
Boosting是控制相关度的一种手段
参数Boosting的含义
- 当boost > 1时,打分的相关度相对性提升
- 当0<boost<1时,打分的权重相对性降低
- 当boost<0时,贡献负分
应用场景
希望包含了某项内容的结果不是不出现,而是排序靠后
示例
返回匹配positive查询的文档并降低匹配negative查询的文档相似度分。这样就可以在不排除某些文档的前提下对文档进行查询,搜索结果中存在只不过相似度分数相比正常匹配的要低
GET /[index]/_search
{
"query":{
"boosting":{
"positive":{
"term":{
"content":"elasticsearch"
}
},
"negative":{
"term":{
"content":"like"
}
},
"negative_boost":0.2
}
}
}