简介
说明
本文介绍Kinaba的KQL查询语法的使用。
官网网址
KQL语法:
https://www.elastic.co/guide/en/kibana/7.7/kuery-query.html
Lucene语法:
https://www.elastic.co/guide/en/kibana/7.7/lucene-query.html
Kibana的两种查询语法
Kibana的7.x版本支持两种查询语法:
-
KQL(Kibana Query Language)语法
-
Lucene 语法
默认是KQL,如果关闭KQL,则使用Lucene语法。
Kibana查询界面的进入方式如下:
KQL查询语法
全文搜索
说明
直接输入查询内容即可。
示例:
查找包含hello,或者包含world,或者两者都包含。
限定字段
语法
字段名: 匹配值
示例1:
查询FlightNum字段匹配"4H2KUBH"字符串的文档。
示例2:
查询FlightNum字段存在(无论值是什么)的文档。
范围查询
说明
可以指定日期、数字或者字符串字段的范围。
关系运算符只能用在数值和时间类型的字段。
支持关系运算符如下:
-
<= 小于等于
-
>= 大于等于
-
< 小于
-
> 大于
示例:年龄大于等于30的
逻辑操作
支持逻辑运算符如下:
示例1:and 的用法
查询name字段包含jane,且addr字段包含beijing的记录。
name:jane and addr:beijing
注意:查询结果不区分大小写
示例2:or 的用法
查询name字段包含jane,或者addr字段包含beijing的记录,或者两者都匹配。
name:jane or addr:beijing
示例3:not 的用法
查询出response字段中不包含200的记录
查询response包含200,并且整条记录不包含yes的数据记录
查询response包含200,且response不包含yes的记录
response:(200 and not yes)
示例4:多个运算符结合
查询name包含jane且addr包含beijing的记录,或者job包含teacher的记录。
name:jane and addr:beijing or job:teacher
KQL中,and的优先级高于or。上方结果可以使用小括号来理解
(name:jane and addr:beijing) or job:teacher
示例5:值里使用运算符
查询response包含200,或者response包含404,或者包含200和404的记录。
或者
response:200 or response:400
注意:不保证顺序、不区分大小写。
嵌套查询
原始数据
{
"level1": [
{
"level2": [
{
"prop1": "foo",
"prop2": "bar"
},
{
"prop1": "baz",
"prop2": "qux"
}
]
}
]
}
需求
查找 level1.level2.prop1 是 foo 或者是 baz的
写法
level1.level2 { prop1: "foo" or prop1: "baz" }
KQL查询通用规则
如下几项规则适用于所有场景,包括:全文检索、限定字段、模糊字段等。
引号
直接输入内容则会将内容进行分词,然后查询;若不想分词,整词查询,则两边加引号即可。
示例1:
查找包含hello,或者包含world,或者两者都包含。
示例2:
查找包含hello world的。
模糊查询
说明
? 匹配单个字符
* 匹配0到多个字符
示例1:全文索引
下边这个可匹配:kibana
下边这个可匹配:elasticsearch
示例2:限定字段
下边这个可匹配title含有kibana的文档。
示例3:模糊字段
下边这个可匹配title含有kibana的文档。
容错查询
说明
~: 在一个单词后面加上~启用模糊搜索,可以搜到一些拼写错误的单词。
示例
能匹配到 frist