如何在elasticsearch中实现以下sql查询?

时间:2017-02-14 10:59:41

标签: elasticsearch

想知道以下sql查询的等效弹性搜索查询?

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

如何以高效的方式实现这一目标?

一种方法是在第一个Elasticsearch查询中获取所有val1,并使用val1值获取第二个Elasticsearch查询中的所有值。有没有其他方法可以在单个Elasticsearch查询中获得结果,而不是两个Elasticsearch查询

1 个答案:

答案 0 :(得分:0)

您可以根据HTTP POST请求进行查询。

请求:

http://localhost:9200/yourindex/_search

请求正文:

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

您可以使用ES OR 中的:符号,而不是使用 IN 关键字,您仍然可以使用Terms Query。这SO&这thread可能会有所帮助。

修改

使用条款查询:

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