Elasticsearch嵌套字段多值匹配:获取含指定所有年龄的文档
解决方案:查询包含指定所有年龄值的嵌套数组文档
针对你的需求,无需修改索引映射,可通过**布尔查询(bool query)结合多个嵌套查询(nested query)**实现,确保文档的patients嵌套数组中同时存在age为"1"和"2"的子对象。
具体查询语句
GET testindex1/_search { "query": { "bool": { "must": [ { "nested": { "path": "patients", "query": { "term": { "patients.age": "1" } } } }, { "nested": { "path": "patients", "query": { "term": { "patients.age": "2" } } } } ] } } }
逻辑说明
- 布尔查询的
must子句:要求数组内同时满足所有嵌套查询条件,确保文档中既存在age=1的患者,也存在age=2的患者。 - 嵌套查询(nested query):由于
patients是nested类型,必须通过该查询指定字段路径,Elasticsearch会单独评估每个嵌套子对象的匹配情况,而非扁平化数组后的模糊匹配。 - term查询:因为
age字段定义为keyword类型,使用term查询可精准匹配字段值,避免分词干扰。
执行该查询后,将返回文档1和文档2,文档3因缺少age=1的患者子对象会被排除。
内容的提问来源于stack exchange,提问作者Victor Kamada
相关产品推荐
相关产品推荐

