前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kibana查询语言(KQL)AND、OR匹配,模糊匹配

Kibana查询语言(KQL)AND、OR匹配,模糊匹配

作者头像
鱼找水需要时间
发布2023-02-16 16:35:27
10.3K0
发布2023-02-16 16:35:27
举报
文章被收录于专栏:SpringBoot教程

一. 前言

现在大多数的公司都会使用ELK组合来对日志数据的收集、存储和提供查询服务。ElasticSearch + Logstash+ Kibana

查询数据库,如果是MySQL,那么就需要使用MySQL的语法;同样的,在Kibana上查询数据,也需要使用Kibana的语法,而Kibana的查询语法叫做Kibana Query Language,简称KQL

二. KQL简单介绍

KQL(Kibana Query Language),也就是在Kibana上面进行查询时使用的语法。

Kibana中也可以使用Lucene的查询语法,但是这里就不介绍了,可以参考https://www.elastic.co/guide/en/kibana/7.7/lucene-query.html

三. 使用索引匹配查询

​ 在Kibana中进行查询的时候,建议使用指定索引查询,这样的效率更高,而不建议使用全局查找的方式。

比如查找response200的日志,那么就写为response:200,这样去查找中response包含200这个的文档对象;

如果没有指定response200,那么只是单纯的查找200,那么可能会返回金额为200的文档对象(假设有金额字段),查询的效率不高,同时也会返回一些不需要的数据;

四. Kibana查询语法

实例1

代码语言:javascript
复制
response:200

上面这个表达式,会查询出response字段中包含200的文档对象,注意是包含,包含的是200这一个词,比如下面几种情况都会被查询出来

代码语言:javascript
复制
200
hello world 200
hello 200 world

需要注意的是1200或者2001,是不能被查出来的。

如果要查询1200或者2001,这种模糊匹配的,可以使用通配符,比如 response:*200 或者 response:200*

实例2

代码语言:javascript
复制
message:"hello world yes"

上面这个表达式,是针对message字段进行搜索,在搜索的时候不会区分大小写,也就是说,Hello world YES也是会被搜索出来的;

需要注意,上面的"hello world yes"使用了引号,这样的话,这3个单词会被作为一个词进行查询,不会再进行分词,也就是说匹配的时候只会匹配hello world yes这样的顺序匹配,而不会匹配出helllo yes world

实例3

代码语言:javascript
复制
message:hello world

上面这个表达式,针对message字段进行搜索,搜索message包含hello,或者包含world,或者两者都包含的情况;

需要注意的是,不区分大小写,也不会保证顺序,也就是说,下面几种情况都会被匹配

代码语言:javascript
复制
hello
world
Hello
World
hello world
Hello world
hello yes World
yes world
world yes

实例4

代码语言:javascript
复制
name:jane or addr:beijing

上面这个查询条件,会查询name字段包含jane,或者addr字段包含beijing的记录,或者两者都匹配;

需要注意的是,or表示 “或” ,不区分大小写;

实例5

代码语言:javascript
复制
name:jane and addr:beijing

上面这个条件,会查询name字段包含jane,且addr字段包含beijing的记录。

实例6

代码语言:javascript
复制
name:jane and addr:beijing or job:teacher

上面这个查询条件中,出现了andor,需要记住的是,KQL中,and的优先级高于or

所以上面的查询条件,会查询name包含jane,且addr包含beijing的记录,或者job包含teacher的记录,可以使用括号来让上面的查询条件更好理解:

代码语言:javascript
复制
(name:jane and addr:beijing) or job:teacher

实例7

代码语言:javascript
复制
name:jane and (addr:beijing or job:teacher)

上面这个表达式,主要是想表明,可以使用括号来控制匹配的优先级。

实例8

代码语言:javascript
复制
response:(200 or 404)

上面这个表达式,会查询response包含200,或者response包含404,或者包含200404的记录(不保证顺序、不区分大小写);

同时可以使用and来表示 “且” 的关系。

实例9

代码语言:javascript
复制
not response:200

上面这个查询条件,会查询出response字段中不包含200的记录。

实例10

代码语言:javascript
复制
response:200 and not yes

上面这个查询条件,会查询response包含200,并且整条记录不包含yes的数据记录;

实例11

代码语言:javascript
复制
response:(200 and not yes)

上面这个查询条件,会查询response包含200,且response不包含yes的记录。

实例12

代码语言:javascript
复制
response:*

上面这个查询条件,会返回所有包含response字段的文档对象。

实例13

代码语言:javascript
复制
machine*:hello

上面这个查询条件,会查询machine1字段,machine2字段...machinexyzabc字段包含hello的数据记录,这里只是想表达,对于搜索的字段列,也是可以使用通配符的。

五.总结

KQL还是比较简单地,主要记住KQL匹配时是不区分大小写的,可以使用括号改变匹配优先级

另外一个要点就是,匹配是 包含,某个字段“包含”某个词,而不是某个字段的值为某个词

原文链接:https://www.cnblogs.com/-beyond/p/14159002.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 前言
  • 二. KQL简单介绍
  • 三. 使用索引匹配查询
  • 四. Kibana查询语法
    • 实例1
      • 实例2
        • 实例3
          • 实例4
            • 实例5
              • 实例6
                • 实例7
                  • 实例8
                    • 实例9
                      • 实例10
                        • 实例11
                          • 实例12
                            • 实例13
                            • 五.总结
                            相关产品与服务
                            云数据库 MySQL
                            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档