Elasticsearch查询报错:[match] unknown token [START_ARRAY] after [query] 求助
解决Elasticsearch match查询多值匹配的错误
错误原因
match查询的query参数不支持数组格式,你给c_id的match查询传了["TSM"]数组,导致解析失败,抛出ParsingException。
解决方案
根据你的多值匹配需求,有两种常用处理方式:
1. 精确匹配多值:使用terms查询
如果c_id是keyword类型(或存在c_id.keyword子字段),需要精确匹配多个值时,用terms替代match:
{ "size": 25, "from": 0, "sort": [ { "r_date.keyword": { "order": "desc" } } ], "query": { "bool": { "must": [ { "terms": { "c_id": ["TSM", "OTHER_ID"] // 支持传入多个精确值 } }, { "match": { "sec": "500" } }, { "range": { "r_date": { "gte": "02/28/2023", "lte": "08/29/2023", "format": "MM/dd/yyyy" } } } ] } } }
注意:如果
c_id是text类型,需改用c_id.keyword(前提是字段映射中定义了该子字段),否则可能无法匹配到预期结果。
2. 模糊匹配多值:空格分隔字符串或bool should组合
如果需要对多个值做模糊分词匹配,有两种实现方式:
- 直接给
match的query传空格分隔的字符串(默认OR逻辑,匹配任意一个值):
{ "match": { "c_id": { "query": "TSM OTHER_VALUE" // 空格分隔,等价于匹配TSM或OTHER_VALUE } } }
- 用
bool的should组合多个match(逻辑更灵活,可自定义匹配规则):
{ "bool": { "should": [ {"match": {"c_id": "TSM"}}, {"match": {"c_id": "OTHER_VALUE"}} ], "minimum_should_match": 1 // 至少匹配一个值,可选参数,默认值为1 } }
内容的提问来源于stack exchange,提问作者Ajay Takur
相关产品推荐
相关产品推荐

