Хитрость заключается в том, чтобы заключить оба подзапроса в bool-should:
{
"query": {
"bool": {
"should": [
{
"terms": { "privacy": [ "public" ] }
},
{
"bool": {
"filter": [
{
"terms": { "privacy": [ "group" ] }
},
{
"terms": { "user_id": [ 1, 3 ] }
}
]
}
}
]
}
}
}
FYI: обратите внимание на разницу между must
и filter
. TL; DR filter
не оценивает.
РЕДАКТИРОВАТЬ:
{
"terms":{
"privacy":[
"public"
]
}
}
примерно эквивалентно (за исключением оценочной части, как обсуждалось выше)
{
"bool":{
"filter":{
"terms":{
"privacy":[
"public"
]
}
}
}
}
, что полностью эквивалентно
{
"bool":{
"filter":[
{
"terms":{
"privacy":[
"public"
]
}
}
]
}
}
Это просто вопрос многословия.
РЕДАКТИРОВАТЬ 2: переписанный запрос, включающий 2 фильтра
{
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{
"terms": { "privacy": [ "public" ] }
}
]
}
},
{
"bool": {
"filter": [
{
"terms": { "privacy": [ "group" ] }
},
{
"terms": { "user_id": [ 1, 3 ] }
}
]
}
}
]
}
}
}