Правильный способ для этого - объединить bool/should
(для внешних условий ИЛИ) и bool/filter
(для внутренних условий И) вместе.
POST mytype/_search
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"filter": [
{
"term": {
"id": 123
}
},
{
"term": {
"cid": "classroomIdA"
}
}
]
}
},
{
"bool": {
"filter": [
{
"term": {
"id": 234
}
},
{
"term": {
"cid": "classroomIdB"
}
}
]
}
},
{
"bool": {
"filter": [
{
"term": {
"id": 345
}
},
{
"term": {
"cid": "classroomIdC"
}
}
]
}
}
]
}
}
}
UPDATE
Эквивалент ES 1.7 запрос будет (просто заменить bool/filter
на bool/must
):
POST mytype/_search
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"must": [
{
"term": {
"id": 123
}
},
{
"term": {
"cid": "classroomIdA"
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"id": 234
}
},
{
"term": {
"cid": "classroomIdB"
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"id": 345
}
},
{
"term": {
"cid": "classroomIdC"
}
}
]
}
}
]
}
}
}
Val - большое спасибо. К сожалению, мы используем ES версии 1.7. Вышеуказанный запрос работает только для версии> 2.x. Пожалуйста, дайте мне знать, если у вас есть версия для 1.x –
Готово, см. Мое обновление. – Val
Вал - большое спасибо. работает как шарм. –