【问题标题】:How to convert this SQL query to an Elasticsearch query?如何将此 SQL 查询转换为 Elasticsearch 查询?
【发布时间】:2015-05-29 15:08:05
【问题描述】:

我是 Elasticsearch 查询的新手,所以我对如何将此 SQL 查询转换为 Elasticsearch 查询有点迷茫:

SELECT time_interval, type, sum(count)  
FROM test  
WHERE  (&start_date <= t_date <= &end_date) 
GROUP BY time_interval, type

我知道我可以使用“range”查询来设置 gte 和 lte 的参数,但如果有更清晰的方法来做到这一点,那就更好了.提前致谢!

编辑:

我的 elasticsearch 设置有一个索引:"test",类型为:"summary",并包含具有几个字段的 JSON 文档:

t_datetime

t_date

计数

类型

*t_id**

这些 JSON 文档的 ID 是与 t_id 值连接的 t_date

【问题讨论】:

  • 请提及您的索引映射。
  • 我没有看到您在 SQL 查询中使用的字段名称与您在编辑中提到的字段列表中的名称相同。您能否编辑您的问题,以便清楚您在 SQL 查询中使用的每个字段的类型?
  • @bsarkar 希望现在更清楚了!
  • time_intervalt_datetime一样吗?
  • 我已尝试回答您的问题。你能测试一下它是否解决了你的问题吗?

标签: mysql sql sql-server elasticsearch


【解决方案1】:

假设t_datetimetime_interval相同,可以使用下面的查询:

POST trans/summary/_search?search_type=count
{
   "aggs": {
      "filtered_results": {
         "filter": {
            "range": {
               "t_date": {
                  "gte": "2015-05-01",
                  "lte": "2015-05-30"
               }
            }
         },
         "aggs": {
            "time_interval_type_groups": {
               "terms": {
                  "script": "doc['t_datetime'].value + '_' + doc['type'].value",
                  "size": 0
               },
               "aggs": {
                  "sum_of_count": {
                     "sum": {
                        "field": "count"
                     }
                  }
               }
            }
         }
      }
   }
}

此查询正在使用脚本。在较新版本的 Elasticsearch 中,动态脚本默认是禁用的。要启用动态脚本,请关注this

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多