Elasticsearch中filter过滤查询不生效返回0条结果是什么原因
问题根本原因
你的test字段在mapping中被定义为nested(嵌套)类型,Elasticsearch对嵌套类型的字段有单独的查询规则,直接通过路径test.name.enum写term过滤无法识别嵌套结构,会默认当成普通顶层字段查询,自然匹配不到任何文档。
修正后的查询语句
你需要把针对嵌套字段的过滤逻辑用nested查询语法包裹,修改后的完整查询如下:
{ "query": { "bool": { "must": [ { "query_string": { "query": "query", "fields": [ "some.field" ], "lenient": true, "default_operator": "OR" } } ], "filter": [ { "nested": { "path": "test", "query": { "term": { "test.name.enum": { "value": "filterTerm" } } } } } ] } } }
额外注意事项
nested查询的path参数必须和你定义的嵌套字段名完全一致,此处为test- 嵌套查询内部引用字段时必须写完整路径,不能省略
test.前缀 - 如果
test字段是嵌套对象数组,该语法会自动匹配数组中任意一个符合过滤条件的嵌套对象,无需额外配置
内容的提问来源于stack exchange,提问作者Sdeeeeeeeeeeee
相关产品推荐
相关产品推荐

