Elasticsearch中组合query_string与filter查询报错问题
问题原因
你的组合查询结构不符合Elasticsearch的语法规范,query字段下只能存在一个顶级查询类型,你同时在query下定义了query_string和bool两个顶级查询节点,导致ES解析时抛出格式错误。
正确的组合查询写法
要同时实现全文检索和过滤,需要把query_string放到bool查询的must数组中,让bool作为唯一的顶级查询,统一管理检索和过滤条件:
{ "query": { "bool": { "must": [ { "query_string": { "query": "big size" } } ], "filter": [ { "match": { "lang": "en" } } ] } }, "size": 10, "from": 0, "sort": [] }
逻辑说明
bool.must:执行query_string的全文检索,只有匹配"big size"的文档才会进入结果集,且该条件会影响文档的相关性评分bool.filter:过滤出lang字段为"en"的文档,该条件不影响评分,ES会自动缓存过滤结果提升性能
内容的提问来源于stack exchange,提问作者John V
相关产品推荐
相关产品推荐

