Elasticsearch非nested类型students下查询tag.id的多值匹配方法
ES普通object类型下多id查询方案
如果students字段未定义为nested类型,默认属于ES的普通object类型,此时嵌套的tag.id会被自动扁平化存储为值数组,无需使用nested查询语法,直接用terms查询即可实现多个id值的匹配。
示例查询DSL如下,将{your_index_name}替换为实际的索引名,数组中替换为你要匹配的多个tag id即可:
GET /{your_index_name}/_search { "query": { "terms": { "students.tag.id": ["tag_id1", "tag_id2", "tag_id3"] } } }
注意事项
- 由于你定义的
tag.id为keyword类型,查询时传入的id需要和存储的内容完全匹配,区分大小写 - terms查询默认匹配数组中任意一个值即可命中,只要文档的
students.tag.id包含你传入的数组中的任意一个id,就会返回该文档 - 普通object类型存在局限性:如果你需要同时匹配同一条tag的id和name字段,会出现交叉匹配问题(即id和name可以来自不同的tag对象也会命中),如果有这类关联查询需求还是建议将对应嵌套字段设置为nested类型。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

