ES相关度评分有三个参数不太明白,我录入了两条数据,分别为:
{"id":"2","enName":"bad apple can't be eaten"}、{"id":"1","enName":"bad apple"},
根据相关资料,一个字段包含的词项数越少,得分越高,所以我以为搜索"apple"的时候,id为1的数据得分会高于id为2的数据,但是最终结果两条数据得分一致。查看词频(TF)打分公式(freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)),发现fieldLength和avgFieldLength始终相等,这导致不管字段有多长,最终值都是1.0,这是怎么回事呢?另外查看逆文档频率(IDF),发现语料库的文档总数(docCount)和包含该词的文档数(docFreq)也永远为1.0。各位大佬有知道怎么回事的吗?
{"id":"2","enName":"bad apple can't be eaten"}、{"id":"1","enName":"bad apple"},
根据相关资料,一个字段包含的词项数越少,得分越高,所以我以为搜索"apple"的时候,id为1的数据得分会高于id为2的数据,但是最终结果两条数据得分一致。查看词频(TF)打分公式(freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)),发现fieldLength和avgFieldLength始终相等,这导致不管字段有多长,最终值都是1.0,这是怎么回事呢?另外查看逆文档频率(IDF),发现语料库的文档总数(docCount)和包含该词的文档数(docFreq)也永远为1.0。各位大佬有知道怎么回事的吗?
6 个回复
ydzll
赞同来自:
hapjin
赞同来自:
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
God_lockin
赞同来自:
HelloClyde
赞同来自:
core_wzw - 某AILab搜索技术负责人
赞同来自:
所以,文档量少到一定程度时,有两种方式可以解决参数值不一致的问题:
(1)search_type=dfs_query_then_fetch,相当于计算时会去计算所有Shard上的参数值,实时计算取值,比较慢;
(2)preference=_primary,只在主分片上倒排求交,没有利用副本分片做计算,不算慢。
建议用第二种。