2016-08-24 2 views
0

Как я могу получить этот простой SQL-запрос, запущенный на Elasticsearch?Elasticsearch сопоставляет комбо из двух полей

SELECT * FROM [mytype] where (id=123 and cid = classroomIdA) or 
(id=234 and cid = classroomIdB) or (id=345 and cid = classroomIdC) 

У меня действительно проблемы с его синтаксисом, запросы с несколькими совпадениями не работают в моем случае. Какой тип запроса я должен использовать?

ответ

0

Правильный способ для этого - объединить 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" 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Val - большое спасибо. К сожалению, мы используем ES версии 1.7. Вышеуказанный запрос работает только для версии> 2.x. Пожалуйста, дайте мне знать, если у вас есть версия для 1.x –

+0

Готово, см. Мое обновление. – Val

+0

Вал - большое спасибо. работает как шарм. –

Смежные вопросы