我有一个User
映射,如:
name: {
type: "string"
},
followed_groups: {
type: "nested",
properties: {
created_at: {
type: "string"
},
group_id: {
type: "string"
}
}
},
id: {
type: "integer"
},
member_of_groups: {
type: "nested",
properties: {
created_at: {
type: "string"
},
group_id: {
type: "string"
}
}
}
我希望得到关注群组或其成员的用户。
每个单独的查询都可以使用嵌套查询,如:
"query":{
"nested":{
"query":{
"terms":{
"followed_groups.group_id":[
"22"
]
}
},
"path":"followed_groups"
}
}
但我无法找到将两者合并为OR
条件的方法。有可能吗?
答案 0 :(得分:1)
在我看来,您并不关心使用查询提供的评分,请参阅下面的使用过滤器的解决方案。
可以简单地使用你在should指令中的查询数组中给出的查询指令:
{ "query" : {
"bool" : {
"should" : [
{
"query" : {
"nested" : {
"query" : {
"terms" : {
"followed_groups.group_id" : [
"22"
]
}
},
"path" : "followed_groups"
}
}
},
{…}
]
}
}}
可以在顶层使用过滤器,但在使用分面时这并不好,所以我在这里使用filtered查询:
{
"query": {
"filtered" : {
"query" : { "match_all" : {} },
"filter" :{ "or" : [
{
"nested":{
"query":{
"terms":{
"followed_groups.group_id":[
"22"
]
}
},
"path":"followed_groups"
}
},
{…}
]
}
}
}
}
我还没有对此进行测试,但这至少应该为您的查询提供正确的结构。