在ES中,我们可以使用嵌套JSON来对复杂类型的数据进行索引和查询。这里我们介绍一些常见的嵌套JSON查询方法。
首先,我们需要知道如何索引嵌套JSON。我们使用点(.)符号来索引JSON对象的属性,使用方括号([ ])来索引JSON对象的数组元素。如果我们要查询嵌套JSON中的某个属性,可以使用点符号连接多个属性名称。例如,在一个拥有父子关系的JSON中,我们可以使用以下方式查询父级节点的某个属性:
GET /my_index/my_type/_search { "query": { "match": { "parent.name": "John" } } }
如果我们要查询嵌套JSON数组中的元素,可以使用nested查询。以下是一个查询某个车型的名字、颜色以及用户评论的例子:
GET /my_index/my_type/_search { "query": { "nested": { "path": "cars", "query": { "bool": { "must": [ { "match": { "cars.name": "BMW" } }, { "match": { "cars.color": "red" } }, { "match": { "cars.comments": "good" } } ] } } } } }
除此之外,我们还可以使用has_child和has_parent查询子文档和父文档。以下是一个查询某个商品的评价数量的例子:
GET /my_index/my_type/_search { "query": { "has_child": { "type": "comments", "query": { "match": { "content": "good" } } } } }
以上就是一些常见的ES查询嵌套JSON的方法,希望能对大家有所帮助。