Elasticsearch查询如何仅返回对象数组中符合指定条件的元素
Elasticsearch 过滤返回指定数组对象实现方案
前置要求
你需要先确认索引中watch_providers字段的映射类型为nested,只有nested类型支持数组内单个对象的独立匹配与筛选,如果是默认的object类型无法实现该需求,需要先调整映射后重新导入数据。
具体实现方案
你完全可以使用nested + inner hits功能实现需求,查询语句示例如下:
GET usermovies/_search { "_source": { "excludes": ["watch_providers"] }, "query": { "bool": { "must": [ // 此处可保留你原本的查询条件,无额外查询条件可删除该注释和占位位置 { "nested": { "path": "watch_providers", "query": { "term": { "watch_providers.country": "US" } }, "inner_hits": { "name": "us_watch_providers", "_source": ["watch_providers.*"] } } } ] } } }
结果处理说明
- 原文档除
watch_providers之外的所有字段都会在_source节点中完整返回 - 过滤后仅包含US国家的watch_providers数组对象会在返回结果的
inner_hits.us_watch_providers.hits.hits[]._source节点中返回,你可以直接把该部分数据合并到原文档结构中即可得到你需要的最终格式。
内容的提问来源于stack exchange,提问作者Programjon
相关产品推荐
相关产品推荐

