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)。