ES检索keyword 和 text 字段类型的评分区分

1. 问题

1. 使用全文检索时,文件名未命中(朱发现)

2. 文件名命中,但排名靠后(分数太低)(在解决第一个问题后测试时发现)

2. 问题挖掘

2.1 文件名未命中

文件名在数据结构中字段名为 common.file_name ,字段类型为 keyword

问题是 query_string 查询无法对 keyword 类型字段进行有效查询(必须完全匹配、不支持通配符查询)

因此,查询文件名需要单独将 common.file_name作为 wildcard 查询,与其他关键字进行并列查询

这个问题比较好解决,整体调整查询 DSL 语句就可以

2.2 文件名命中排名靠后

这个问题的本质是通过文件名命中的文档,ES打分偏低,了解这个问题,可以参考 @腾讯云开发者 的文章: 总是搜不到想要的内容?Elasticsearch搜索排名优化了解一

在对排名靠后的文章调用 _explain API 分析后,发现:

- 对于 keyword 类型的 common.file_name 字段的检索,其分数等于给该字段查询提供的 boost 权值,是一个常数,

- 而对于 text 类型的其他字段的检索,其分数跟各字段的分数权值、命中检索词的个数、命中字段的 tf/idf 等条件有关,往往会远大于common.file_name 字段的打分。

得到的结论就是,keyword 检索与 text 检索位于同一级别的检索中时,打分方式不同,得到的结果排序很难如预期。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容