Elasticsearch中如何为数组字段各元素设置不同Boost值?
解决方案:无需脚本,用bool查询实现多值差异化boost
不需要用脚本就能实现这个需求,直接用bool查询的should子句,给每个单独的term查询设置对应的boost值即可,完全适配数组长度不固定的场景。
对应你要的boost值,查询语句示例如下:
{ "query": { "bool": { "should": [ {"term": {"array_fileds": {"value": "value1", "boost": 9}}}, {"term": {"array_fileds": {"value": "value2", "boost": 6}}}, {"term": {"array_fileds": {"value": "value3", "boost": 3}}} ], "minimum_should_match": 1 } } }
核心说明
terms查询仅支持给整个字段设置统一boost,无法为单个值单独分配权重;bool的should子句会将每个匹配的term查询分数按规则计算(默认累加),刚好满足不同值对应不同权重的需求;- 当数组长度不固定时,只需动态往
should数组中添加对应term项即可,每个项独立设置boost,灵活性拉满。
内容的提问来源于stack exchange,提问作者Doo9104
相关产品推荐
相关产品推荐

