简介

说明

        本文介绍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版本支持两种查询语法:

  1. KQL(Kibana Query Language)语法
  2. Lucene 语法

默认是KQL,如果关闭KQL,则使用Lucene语法。

Kibana查询界面的进入方式如下:

Kibana--KQL查询语法的使用_关系运算符

Kibana--KQL查询语法的使用_关系运算符_02

KQL查询语法

全文搜索

说明

        直接输入查询内容即可。

示例:查找包含hello,或者包含world,或者两者都包含。

hello world

限定字段

语法

字段名: 匹配值

示例1:查询FlightNum字段匹配"4H2KUBH"字符串的文档。

FlightNum: 4H2KUBH

示例2:查询FlightNum字段存在(无论值是什么)的文档。 

FlightNum: *

范围查询

说明

        可以指定日期、数字或者字符串字段的范围。关系运算符只能用在数值和时间类型的字段。

支持关系运算符如下:

  • <= 小于等于
  • >= 大于等于
  • < 小于
  • > 大于

示例:年龄大于等于30的

age >= 30

逻辑操作

支持逻辑运算符如下:

  • and:与
  • or:或
  • not:非

示例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的记录

not response:200

查询response包含200,并且整条记录不包含yes的数据记录 

response:200 and not 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 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,或者两者都包含。

hello world

示例2:查找包含hello world的。

"hello world"

模糊查询

说明

? 匹配单个字符

 * 匹配0到多个字符

示例1:全文索引

下边这个可匹配:kibana

kiba?a

下边这个可匹配:elasticsearch 

el*search

示例2:限定字段 

下边这个可匹配title含有kibana的文档。

title:kiba?a

示例3:模糊字段 

下边这个可匹配title含有kibana的文档。

tit*:kibana

容错查询

说明

~: 在一个单词后面加上~启用模糊搜索,可以搜到一些拼写错误的单词。

示例

first~

能匹配到 frist