从SQL转换为elasticsearch查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从SQL转换为elasticsearch查询相关的知识,希望对你有一定的参考价值。

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(),也会很好。

答案

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

以上是关于从SQL转换为elasticsearch查询的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 查询转换为 Elasticsearch dsl 以进行数据可视化

Elasticsearch全文检索技术 一篇文章即可从入门到精通(Elasticsearch安装,安装kibana,安装ik分词器,数据的增删改查,全文检索查询,聚合aggregations)(代码片

ElasticSearch 将嵌套字段的 Rest 查询转换为客户端 Scala/Java 代码

2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)

如何将 SQL 查询从 MySQL 8 转换为 MySQL 5.7

如何将表达式树转换为部分 SQL 查询?