【问题标题】:How could I have MySQL sum() and group by clause within my elasticsearch query?我的弹性搜索查询中如何包含 MySQL sum() 和 group by 子句?
【发布时间】:2016-09-29 08:41:05
【问题描述】:

我正在尝试将elasticsearch 查询作为GET 请求执行,以便从我创建的索引中提取数据。索引中的数据是来自MySQL DB 的表,通过logstash 配置。

这是我没有 IN 子句的请求:

http://localhost:9200/response_summary/_search?q=api:"location"+AND+transactionoperationstatus:"charged"+AND+operatorid='DIALOG'+AND+userid:test+AND+time:"2015-05-27"

在上面,我应该能够附加 sum(chargeAmount+0)group by 。我尝试在网上搜索它,但找不到任何解决方案。

任何帮助都可以得到。

【问题讨论】:

    标签: mysql elasticsearch get elasticsearch-query


    【解决方案1】:

    无论您在查询中放在 q=... 之后的任何内容都使用与 query_string query 相同的语法,因此您可以重写查询以利用 query_string 并使用聚合来计算所需的总和:

    curl -XPOST http://localhost:9200/response_summary/_search -d '{
       "query": {
           "query_string": {
               "query": "api:\"location\" AND transactionoperationstatus:\"charged\" AND operatorid:\"DIALOG\" AND userid:test AND time:\"2015-05-27\" AND responseCode:(401 403)"
           }
       },
       "aggs": {
          "total": {
              "terms": {
                  "field": "chargeAmount"
              },
              "aggs":{
                 "total": {
                    "sum": {
                        "field": "chargeAmount"
                    }
                 }
              }
          }
       }
    }'
    

    在 Postman 中,它看起来像这样:

    【讨论】:

    • 但是我要如何从邮递员那里发布这个curl 请求呢?我尝试使用 postman 导入此 curl,但随后显示为 invalid format
    • "aggs": { "total": { "sum": { "field": "chargeAmount" } } } 上面做了什么从上面的 curl 中得到 chargeAmount 的总和要求?问题是,我的数据库中的字段(chargeAmount)是varchar,我猜sum 这里需要一个数字值。不是吗?
    • 我将研究string 值问题,如何在sum 中提供字符串字段。我怎样才能使用group by
    • 确实需要是一个数值。另一种选择是使用 Groovy 脚本,但根据您拥有的文档数量,这会降低性能。
    • 是的,我会调查的。 group by 的事情怎么样?我的意思是连同sum?
    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    相关资源
    最近更新 更多