代码之家  ›  专栏  ›  技术社区  ›  flalar

从SQL转换为elasticsearch查询

  •  1
  • flalar  · 技术社区  · 7 年前

    Elasticsearch noob,需要查询帮助。我需要将以下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] 等于 @timestamp 在Elasticsearch文档中。如果弹性查询语法具有 getdate() 到当前数据。

    1 回复  |  直到 6 年前
        1
  •  0
  •   EricPSU    7 年前

    获取所有结果计数的最简单方法是使用 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 我只想拿回 击打 价值观结果如下所示:

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

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