1.什么是搜索的相关性
搜索相关性是衡量查询语句与文档之间的相关的程度。例如 ES中对每个匹配查询都会有对应的得分_score
2.什么是打分,得分是怎么产生的
打分的本质是排序。把最符合用户需求的文档排在前面。ES5之前使用的是tf-idf ,ES5 之后使用的是bm25
3.tf-idf算法介绍
tf term frequency
查询的文本的词条在document中出现的次数,出现次数越高,相关度越高
idf inverse document frequency
查询的文本中词条在索引文档中出现的次数,出现的次数越多,相关度越低
field-length-norm 字段长度规约
字段越短,字段的权重越高;反之,字段越长,相关度越低。
|
|
出现的文档数 |
总文档数 |
IDF |
|---|---|---|---|
| 区块链 | 200万 | 10亿 | log(500)=8.96 |
| 的 | 10亿 | 10亿 | log(1)=0 |
| 应用 | 5亿 | 10亿 | log(2)=1 |
tfidf(t,d,D)=tf(t,d)*idf(t,D)
4.bm25 best match
k的默认值是1.2 数值越小,饱和度越高。b 的值是0.75 b为 0 代表 normalization
1.ES为什么使用BM25还不是tf-idf
TF无限增加,BM会趋于一个稳定的数值
idf的缺陷: terms 出现在超过一半的文本中,会使idf的值计算为负值。
5.function_score 可以修改查询以后的文档的分数
通过 boosting negative_boosting 降低某些文档的排名 比如我们想要查看不含某个单词,但是希望降低包含另一个单词的文档的得分
通过 field_value_factor 对指定的字段作为权重进行加权。
参考
1.https://en.wikipedia.org/wiki/Tf%E2%80%93idf
2.https://en.wikipedia.org/wiki/Okapi_BM25
3.https://www.elastic.co/guide/en/elasticsearch/guide/current/not-quite-not.html#boosting-query
4.https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html