暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch 查询 KQL

小数据自留地 2023-03-11
6616

我们对于Elasticsearch的使用长期以来还是停留在kibana discover中输入关键词进行简单的日志搜索,对于ES的核心搜索查询的理解和使用仍比较浅显。最近正好接到一个稍微复杂的需求,趁这个机会更加深入的去了解下搜索查询,本文先以最基础的KQL入门,后面再逐步展开。

Kibana discover 和 KQL

在Kibana discover中进行搜索,默认的都是使用的KQL (Kibana Query Language),KQL only filters data, and has no role in aggregating, transforming, or sorting data。KQL功能较简单,只能用来过滤,并不具备聚合,转换排序能功能。

Filter for documents that match a value

我们最常见的在搜索栏中直接搜索关键词,实际上是针对所有的field进行搜索:

但实际上大多数情况下我们只是想针对message这个field进行搜索error关键词,可以采用以下指定字段的方式搜索,这样搜索的效率会更高:

    message:error
    复制

    针对 keyword, numeric, date, or boolean fields等类型的查询的时候必须是完全匹配(exact match)。

    默认不加双引号针对text field进行查询的时候, 查询的关键词不进行排序的,如下例子:

      messagenull pointer
      复制

      只要message字段中包含null 和 pointer这二个单独的单词即可,无论是在句中为null pointer 还是 pointer null或者是pointer test null。如果需要按照提供的顺序进行搜索的话需要用双引号引起来:

        message: "null pointer"
        复制

        Filter for documents within a range 

        平时用的最多的就是关键词查询,KQL同时也支持进行范围查询, 比如我们有一个日志会有个字段记录的timestamp类型的时间:

          systime < 1678349721007 AND  systime >1678349689981
          复制

          甚至是es @timestamp字段的时间范围:比如说查询最近5分钟的

            @timestamp>=now-5m 
            复制

            Combining multiple queries

            针对复合条件查询可以采用AND OR 关键词(not case-sensitive), 针对更复杂一点的条件还可以和代码一样使用括号:

              (http.request.method: GET AND http.response.status_code: 200) OR
              (http.request.method: POST AND http.response.status_code: 400)
              复制

              或者这样的:

                http.request.method: (GET OR POST OR DELETE)
                复制

                KQL还有一些其他的功能,比如query nested fields等,大家可以直接查阅官方文档

                https://www.elastic.co/guide/en/kibana/current/kuery-query.html

                小结

                开发和业务同学查询日志,主要是使用的是KQL,了解KQL的基本语法,善用discover页面提供的dataview和filter功能,可以大幅提高搜索的效率和时间。其实这个和大家经常看到的Mysql优化一样,为了提高Mysql查询的效率可以在sql查询本身,索引,表结构,系统以及硬件层面多个方面进行优化,放在ES中是同样的道理,优化查询本身(KQL,Query DSL), 结合Index和Shard的设计,操作系统和使用SSD硬盘等多个层面都进行优化,才能更好的提升查询效率。

                文章转载自小数据自留地,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论