2017-02-14 3 views
0

Хотите узнать эквивалентный запрос elasticsearch для запроса ниже sql?Как получить следующий запрос sql в elasticsearch?

SELECT * FROM table1 where val1 in (SELECT val1 FROM table1 WHERE val2 = "123"); 

Как достичь этого эффективным способом?

Один из способов - получить все val1 в 1-м запросе Elasticsearch и с значениями val1 извлечь все значения во втором запросе Elasticsearch. Есть ли какой-либо другой способ, с помощью которого мы можем получить результаты в одном запросе Elasticsearch вместо двух запросов Elasticsearch.

ответ

0

Возможно, у вас может быть ваш запрос как таковой, если ваш заголовок направлен на запрос HTTP POST.

Запрос:

http://localhost:9200/yourindex/_search 

Запрос кузова:

{ 
    "query": { 
     "query_string": { 
      "query": "val1:(val2:\"123\")" 
     } 
    } 
} 

Вместо использования IN ключевое слово, вы могли бы пойти с : символ в ES ИЛИ еще можно было использовать Terms Query , Это SO & это thread может быть полезно.

EDIT

Используя терминам запрос:

{ 
    "query" : { 
    "bool" : { 
     "filter" : { 
     "terms" : { 
      "val1" : [ "val2" : ["123"]] 
     } 
     } 
    } 
    } 
} 
+0

Это дает ответ только для внутреннего суб запроса SELECT, знач1 FROM table1 WHERE val2 = "123", а не весь запрос –

+0

@ MahalakshmiRamanathan Пробовал ли вы использовать запрос 'terms'? Я отредактировал ответ. – Kulasangar