如何在Elasticsearch中查询嵌套对象结构的指定key及对应字段?
问题原因说明
你原查询的错误在于直接对available_at字段执行term查询,但available_at是嵌套对象结构,并非存储单个值的普通字段,因此无法匹配到预期结果。
正确查询方案
根据你的实际需求,分两种常用场景给出对应查询语句:
场景1:查询available_at下任意子对象的item_id值在[5,6]范围内的文档
如果你的available_at是普通object类型,直接使用terms查询即可:
{ "query": { "bool": { "must": [ { "terms": { "available_at.item_id": [5, 6] } } ] } } }
如果你的available_at被设置为nested嵌套类型,需要使用nested查询避免交叉匹配:
{ "query": { "nested": { "path": "available_at", "query": { "terms": { "available_at.item_id": [5, 6] } } } } }
场景2:查询available_at下存在键为"5"或"6"的子对象的文档
如果你的需求是匹配available_at中是否存在对应键的子对象,使用bool+exists查询即可:
{ "query": { "bool": { "should": [ { "exists": { "field": "available_at.5" } }, { "exists": { "field": "available_at.6" } } ], "minimum_should_match": 1 } } }
内容的提问来源于stack exchange,提问作者Sahil Paudel
相关产品推荐
相关产品推荐

