Elasticsearch 1.7组合match_phrase过滤器报错问题求助
解决Elasticsearch 1.7多过滤器组合的QueryParsingException错误
你的问题出在两个关键的语法错误上,咱们一步步来修正:
错误原因分析
- bool filter的
must字段格式错误:当你需要组合多个过滤条件时,must必须是一个数组,而不是单个对象。你当前的请求把nested和query放在同一个对象里,ES无法正确解析多个条件。 - JSON结构不符合ES 1.7要求:每个过滤条件都应该是
must数组里的独立元素,你之前的写法不仅不符合ES语法,本身也是无效的JSON(同一对象内不能存在重复逻辑的键值对)。
修正后的查询请求体
{ "query": { "match_phrase": { "name": "aaron" } }, "filter": { "bool": { "must": [ { "nested": { "path": "addresses", "query": { "match_phrase": { "address": "scarborough" } } } }, { "query": { "match_phrase": { "phone": "813-689-6889" } } } ] } } }
额外说明
在Elasticsearch 1.7中,filter上下文里如果要使用match_phrase这类查询语句,必须用query过滤器包裹起来(就像你单独查询电话时做的那样);而nested过滤器本身属于filter类型,所以可以直接放在must数组里作为独立元素。
内容的提问来源于stack exchange,提问作者queroga_vqz
相关产品推荐
相关产品推荐

