从SQL转换为elasticsearch查询

问题描述 投票:1回答:1

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对弹性搜索运行查询,并需要帮助编写查询。

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

elasticsearch lucene elastic-stack elasticsearch-5
1个回答
0
投票

获得所有结果计数的最简单方法是在结果集中使用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

© www.soinside.com 2019 - 2024. All rights reserved.