2017-02-14 22 views
0

想知道下面的sql查詢的等價elasticsearch查詢嗎?如何在elasticsearch中實現以下sql查詢?

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

如何以高效的方式實現此目的?

一種方法是獲取第一個Elasticsearch查詢中的所有val1,並使用val1值獲取第二個Elasticsearch查詢中的所有值。是否有任何其他方式,我們可以在單個Elasticsearch查詢中獲得結果而不是兩個Elasticsearch查詢

回答

0

您可以將您的查詢設定爲假設您的標題朝向HTTP POST請求。

請求:

http://localhost:9200/yourindex/_search 

請求正文:

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

而不是使用IN關鍵字,你可以用:符號去ES OR你仍然可以使用Terms Query 。這SO &這個thread可能會有所幫助。

EDIT

使用術語查詢:

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

這僅用於內部子查詢SELECT VAL1 FROM表1 WHERE VAL2 = 「123」,而不是整個查詢 –

+0

@給出響應MahalakshmiRamanathan你嘗試使用'terms'查詢嗎?我編輯了答案。 – Kulasangar