包装另一个查询以搜索nested字段。
nested查询搜索nested字段对象,就好像将它们作为单独的文档进行索引一样。如果对象匹配搜索,nested查询返回根父文档。
示例
索引设置
要使用nested查询,索引必须包含nested字段映射。例如:
PUT /my-index-000001
{
"mappings": {
"properties": {
"obj1": {
"type": "nested"
}
}
}
}
示例查询
GET /my-index-000001/_search
{
"query": {
"nested": {
"path": "obj1",
"query": {
"bool": {
"must": [
{ "match": { "obj1.name": "blue" } },
{ "range": { "obj1.count": { "gt": 5 } } }
]
}
},
"score_mode": "avg"
}
}
}
nested的顶层参数
path (必选,字符串)您希望搜索的嵌套对象的路径。
query (必需的,查询对象)您希望在路径中的嵌套对象上运行的查询。如果对象匹配搜索,嵌套查询返回根父文档。可以使用包含完整路径的点表示法搜索嵌套字段,比如obj1.name。
多级嵌套将被自动支持和检测,从而导致内部嵌套查询自动匹配相关嵌套级别,而不是根,如果它存在于另一个嵌套查询中。
score_mode (可选,字符串)指示匹配子对象的得分如何影响根父文档的相关性得分。有效值:
- avg 默认
- max
- min
- none
- sum
ignore_unmapped (可选,布尔值)指示是否忽略未映射的路径,不返回任何文档而不是错误。默认值为false。
备注
脚本查询上下文
如果在嵌套查询中运行脚本查询,则只能从嵌套文档访问文档值,而不能访问父文档或根文档。
多级嵌套查询
要了解多层嵌套查询的工作原理,首先需要一个具有嵌套字段的索引。下面的请求用嵌套的make和model字段定义驱动索引的映射。
PUT /drivers
{
"mappings": {
"properties": {
"driver": {
"type": "nested",
"properties": {
"last_name": {
"type": "text"
},
"vehicle": {
"type": "nested",
"properties": {
"make": {
"type": "text"
},
"model": {
"type": "text"
}
}
}
}
}
}
}
}
添加一些数据
PUT /drivers/_doc/1
{
"driver" : {
"last_name" : "McQueen",
"vehicle" : [
{
"make" : "Powell Motors",
"model" : "Canyonero"
},
{
"make" : "Miller-Meteor",
"model" : "Ecto-1"
}
]
}
}
PUT /drivers/_doc/2?refresh
{
"driver" : {
"last_name" : "Hudson",
"vehicle" : [
{
"make" : "Mifune",
"model" : "Mach Five"
},
{
"make" : "Miller-Meteor",
"model" : "Ecto-1"
}
]
}
}
现在可以使用多层嵌套查询来基于make和model字段匹配文档。
GET /drivers/_search
{
"query": {
"nested": {
"path": "driver",
"query": {
"nested": {
"path": "driver.vehicle",
"query": {
"bool": {
"must": [
{ "match": { "driver.vehicle.make": "Powell Motors" } },
{ "match": { "driver.vehicle.model": "Canyonero" } }
]
}
}
}
}
}
}
}
搜索请求返回以下响应:
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 3.7349272,
"hits" : [
{
"_index" : "drivers",
"_type" : "_doc",
"_id" : "1",
"_score" : 3.7349272,
"_source" : {
"driver" : {
"last_name" : "McQueen",
"vehicle" : [
{
"make" : "Powell Motors",
"model" : "Canyonero"
},
{
"make" : "Miller-Meteor",
"model" : "Ecto-1"
}
]
}
}
}
]
}
}