11.ElasticSearch系列之搜索相关性算分机制
1. 相关性和相关性算分
1.1 相关性
- 搜索的相关性算分,描述了一个文档和查询语句匹配的程度。ES会对每个匹配查询条件的结果进行算分_score
- 打分的本质是排序,需要把最符合用户需求的文档排在最前面。ES5之前,默认的相关性算分是TF-IDF,现在采用BM 25
2. 词频TF
- Term Frequency: 检索词在一篇文档中出现的频率
- 检索词出现的次数除以文档的总字数
- 度量一条查询和结果文档相关性的简单方法:将搜索中每个词的TF进行相加
- TF(区块链) + TF(的) + TF(应用)
- Stop Word
- ‘的’在文档中出现了很多次,但对贡献相关度几乎没有作用,不应考虑它们的TF
3. 逆文档频率
- DF: 检索词在所有文档中出现的频率
- “区块链”在相对比较少的文档中出现
- “应用”在相对较多的文档中出现
- “的”在大量的文档中出现
- Inverse Document Frequency: 简单说=log(全部文档数/检索词出现过的文档总数)
- TF-IDF的本质就是将TF求和变成了加权求和
TF(区块链)IDF(区块链) + TF(的)IDF(的) + TF(应用)*IDF(应用)
4. Lucene中的TF-IDF评分公式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lphkSiPS-1666270213901)(http://shenjianblog.oss-cn-shanghai.aliyuncs.com/pic/20220827/a6187e0b424d4fd59902bb34f9cace1f-微信截图_20220827122405.png)]
5. BM 25
- 从ES5开始,默认算法改为BM 25
- 和TF-IDF相比,当TF无限增加时,BM 25算分会趋于一个数值
6. 查询权限提升与降低
// boost > 1 打分提升 0 < boost < 1 打分降低 boost < 0 或 negative_boost 贡献负分
GET kibana_sample_data_flights/_search
{
"explain": true,
"query": {
"boosting": {
"positive": {
"term": {
"DestCountry": {
"value": "IT",
"boost": 2
}
}
},
"negative": {
"range": {
"AvgTicketPrice": {
"gte": 800
}
}
},
"negative_boost": 0.2
}
}
}