【问题标题】:Converting from SQL to elasticsearch query从 SQL 转换为 elasticsearch 查询
【发布时间】:2018-06-28 13:54:58
【问题描述】:

Elasticsearch 新手,在查询方面需要帮助。我有以下 SQL 查询,需要将其转换为 Elasticsearch 的查询

SELECT COUNT(*) 
FROM table 
WHERE Message LIKE '%Communication  has failed.%'
  AND [Date] > CONVERT( CHAR(8), GetDate(), 112) + ' 07:40:00'
  AND [Date] < CONVERT( CHAR(8), GetDate(), 112) + ' 22:15:00'

我想使用 curl 对 elasticsearch 运行查询,并且需要帮助来编写查询。

[Date] 等于 Elasticsearch 文档中的 @timestamp。如果弹性查询语法具有 getdate() 并且等效于当前数据,那也很好。

【问题讨论】:

    标签: elasticsearch lucene elastic-stack elasticsearch-5


    【解决方案1】:

    获取所有结果计数的最简单方法是使用结果集中的hits 字段。如果您想这样做,您的查询将是:

    POST /my_index/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "message": "*Communication  has failed*"
              }
            },
            {
              "range": {
                "my_date_field": {
                  "gte": "01/01/2018",
                  "lt": "01/02/2018",
                  "format": "dd/MM/yyyy"
                }
              }
            }
          ]
        }
      },
      "size": 0
    }
    

    请注意,我正在对date 进行范围查询,并对message 进行匹配查询。 我还将 size 设置为零 b/c 我只想取回 hits 值。结果如下所示:

    {
      "took": 0,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 346,
        "max_score": 0,
        "hits": []
      }
    }
    

    您也可以使用聚合查询,但在这种情况下,您希望在一个字段上进行聚合,聚合的结果将与命中字段值相同。想想像 SQL 中的 GROUP BY 函数这样的聚合。如果您只对GROUP BY 一个组,那么您的组将等于COUNT(*) 的值。如果您有兴趣了解有关聚合的更多信息,请参阅此处的文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 2015-08-03
      • 2019-11-22
      • 2018-10-23
      • 1970-01-01
      • 2014-11-16
      • 2018-09-17
      • 2021-06-27
      相关资源
      最近更新 更多