Nested Query
嵌套查询允许查询嵌套的对象。对嵌套对象/文档执行查询,就好像它们被索引在单独的文档(实际上是在内部),并返回根父文档。下面是我们将使用的映射:
curl -X PUT "localhost:9200/my_index?pretty" -H 'Content-Type: application/json' -d'{"mappings": {"_doc" : {"properties" : {"obj1" : {"type" : "nested"}}}}}'
PUT /my_index{"mappings": {"_doc" : {"properties" : {"obj1" : {"type" : "nested"}}}}}
下面是嵌套查询的用法:
GET /_search{"query": {"nested" : {"path" : "obj1","score_mode" : "avg","query" : {"bool" : {"must" : [{ "match" : {"obj1.name" : "blue"} },{ "range" : {"obj1.count" : {"gt" : 5}} }]}}}}}
path 指明了嵌套对象的路径,在查询内部的 query 将会在目标路径的下与根父文档链接嵌套文档上执行。注意,查询中引用的字段必须使用全路径。
score_mode 用来设置内部匹配的子文档影响父文档评分的方式。默认 avg,也可以是 sum, min, max and none。
这里也有 ignore_unmapped 选项,当设置为 true 时会忽略未映射的 path 且不会匹配任何文档。当查询不同映射的多索引时会很有用。当设置为 false(默认值),path 没有指定映射时会查询会抛出异常。
自动支持并检测多层级的嵌套,如果一个嵌套查询存在于另一个嵌套查询中,内部的嵌套查询会自动的匹配相关的层级(而不是 root)。
