我的索引中有以下对象:
{
"user" : {
"info" : {
"fname" : "John",
"lname" : "Stark"
},
"settings" : {
"hide_menu" : true,
"time_offset" : 3
}
},
"views" : [
]
}
这是映射:
{
"dynamic" : "false",
"properties" : {
"user" : {
"type" : "nested",
"dynamic" : "false",
"properties" : {
"info" : {
"type" : "nested",
"dynamic" : "false",
"properties" : {
"fname" : {
"type" : "string",
"index" : "not_analyzed"
},
"lname" : {
"type" : "string",
"index" : "not_analyzed"
}
}
},
"settings" : {
"type" : "nested",
"dynamic" : "false",
"properties" : {
"hide_menu" : {
"type" : "boolean"
},
"time_offset" : {
"type" : "long"
}
}
}
}
}
}
}
我想创建一个过滤器来查找名字为John并且time_offset = 3的所有用户 所以我需要构建一个必须过滤器,但问题是这两个字段嵌套在不同的层次结构上:user.info和user.settings
如何使用它们进行必须过滤(AND)?
答案 0 :(得分:0)
您可以使用点表示法简单地引用字段。
"filter":{
"bool": {
"must": [
{
"terms": {
"user.info.fname": [
"John"
]
}
},
{
"terms": {
"user.settings.time_offset": [
3
]
}
}
]
}
}
}
修改:根据提供的映射更新了查询
{
"filter": {
"nested": {
"path": "user",
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "user.info",
"filter": {
"terms": {
"user.info.fname": [
"John"
]
}
}
}
},
{
"nested": {
"path": "user.settings",
"filter": {
"terms": {
"user.settings.time_offset": [
3
]
}
}
}
}
]
}
}
}
}
}