使用Elasticsearch terms_set查询遇两类错误求助
解决Elasticsearch terms_set查询的两个常见错误
错误1:未指定minimum相关参数报错
官方文档中minimum_should_match_field是可选字段,但这是指它和minimum_should_match_script二选一,必须指定其中一个,不能都不提供。如果两个参数都不填,ES会报错failed to create query: No minimum should match has been specified。
错误2:minimum_should_match_field传入数值导致字段找不到
minimum_should_match_field的作用是指定文档中已存在的某个字段名称,ES会读取该字段的值作为最小匹配数,而不是直接传入数值(比如1、2、3)。传入数值时,ES会去文档中查找对应名称的字段(比如名为"1"的字段),自然找不到,因此报错failed to find minimum_should_match field。
两种正确的查询方式
方式1:固定最小匹配数(推荐用于简单场景)
如果只需要匹配至少N个terms,使用minimum_should_match_script返回固定数值即可:
POST bw-ecom-1/_search { "query": { "terms_set": { "category": { "terms": ["Men's wear", "Women's wear", "Unisex"], "minimum_should_match_script": { "source": "1" // 这里设置需要匹配的最小数量,比如1、2、3 } } } } }
方式2:动态最小匹配数(按文档字段值决定)
如果需要每个文档使用不同的最小匹配数,先给文档添加存储匹配数的字段,再查询:
- 先更新目标文档,添加字段(比如
required_matches):
POST bw-ecom-1/_update/1 { "doc": { "required_matches": 2 // 该文档需要至少匹配2个terms } }
- 执行terms_set查询:
POST bw-ecom-1/_search { "query": { "terms_set": { "category": { "terms": ["Men's wear", "Women's wear", "Unisex"], "minimum_should_match_field": "required_matches" } } } }
内容的提问来源于stack exchange,提问作者Văn Hữu
相关产品推荐
相关产品推荐

