Elasticsearch编写查询返回status为status1或status2结果报错如何解决
你编写的查询报错的核心原因是match查询不支持传入数组作为查询值,仅支持传入单个值做匹配。
方案1:使用terms查询(推荐,适合枚举类字段精确匹配)
terms查询天生支持匹配字段值等于数组中任意一个的场景,且放到filter上下文中不需要计算相关性得分,性能更高:
{ "query": { "bool": { "filter": [ { "terms": { "status": ["status1", "status2"] } } ] } } }
注:如果status是text类型,需匹配精确值时可替换为status.keyword(前提是你的mapping中配置了对应的keyword子字段)
方案2:使用bool+should组合查询
如果需要基于分词规则做匹配,可以把两个匹配规则放到should子句中,同时设置minimum_should_match为1保证至少满足一个条件:
{ "query": { "bool": { "should": [ { "match": { "status": "status1" } }, { "match": { "status": "status2" } } ], "minimum_should_match": 1 } } }
内容的提问来源于stack exchange,提问作者slj
相关产品推荐
相关产品推荐

