Kibana 查询语言 (KQL) 是一种使用自由文本搜索或基于字段的搜索过滤 Elasticsearch 数据的简单语法。 KQL 仅用于过滤数据,并没有对数据进行排序或聚合的作用。
KQL 能够在您键入时建议字段名称、值和运算符。 建议的性能由 Kibana 设置控制。
KQL 具有与 Lucene 查询语法不同的一组特性。 KQL 能够查询嵌套字段和脚本字段。 KQL 不支持正则表达式或使用模糊术语进行搜索。 要使用旧版 Lucene 语法,请单击搜索字段旁边的 KQL,然后关闭 KQL。
要使用精确的搜索词进行查询,请输入字段名称,后跟:,然后输入以空格分隔的值:
http.response.status_code:400 401 404
对于文本字段,这将匹配任何值,而不管顺序如何:
http.response.body.content.text:quick brown fox
要查询确切的短语,请在值周围使用引号:
http.response.body.content.text:"quick brown fox"
KQL 不需要字段名称。 如果未提供字段名称,则术语将与索引设置中的默认字段匹配。 要跨字段搜索:
"quick brown fox"
布尔查询
KQL 支持 or、and 和 not。 默认情况下,and 的优先级高于 or。 要覆盖默认优先级,请将括号中的运算符分组。 这些运算符可以是大写或小写。
要匹配响应为 200、扩展名是 php 或两者兼有的文档:
response:200 or extension:php
要匹配响应为 200 且扩展名为 php 的文档:
response:200 and extension:php
匹配响应为 200 或 404 的文档。
response:(200 or 404)
要匹配响应为 200 且扩展名是 php 或 css 的文档:
response:200 and (extension:php or extension:css)
要匹配响应为 200 且扩展名为 php 或扩展为 css 且响应为任何内容的文档:
response:200 and extension:php or extension:css
要匹配响应不是 200 的文档:
not response:200
匹配响应为 200 但扩展名不是 php 或 css 的文档。
response:200 and not (extension:php or extension:css)
要匹配包含术语列表的多值字段:
tags:(success and info and security)
范围查询
KQL 支持数字和日期类型的 >、>=、< 和 <=。
account_number >= 100 and items_sold <= 200
日期范围查询
@timestamp < "2021-01-02T21:55:59" @timestamp < "2021-01" @timestamp < "2021"
KQL 支持日期数学表达式。
@timestamp < now-1d updated_at > 2022-02-17||+1M/d
是否存在查询
存在查询匹配包含任何字段值的文档,在本例中为响应:
response:*
Existence 由 Elasticsearch 定义,包括所有值,包括空文本。
通配符查询
要匹配 machine.os 以 win 开头的文档,例如“windows 7”和“windows 10”:
machine.os:win*
要匹配多个字段:
machine.os*:windows 10
当您拥有字段的文本和关键字版本时,此语法很方便。 该查询会检查 machine.os 和 machine.os.keyword 中是否存在术语 windows 10。
嵌套字段查询
{ "grocery_name": "Elastic Eats", "items": [ { "name": "banana", "stock": "12", "category": "fruit" }, { "name": "peach", "stock": "10", "category": "fruit" }, { "name": "carrot", "stock": "9", "category": "vegetable" }, { "name": "broccoli", "stock": "5", "category": "vegetable" } ] }
匹配单个文档
要匹配库存超过 10 个香蕉的商店:
items:{ name:banana and stock > 10 }
items 是嵌套路径。 花括号(嵌套组)内的所有内容都必须匹配单个嵌套文档。 以下查询不返回任何匹配项,因为没有单个嵌套文档具有库存为 9 的香蕉。
items:{ name:banana and stock:9 }
匹配不同的文档
以下子查询位于单独的嵌套组中,可以匹配不同的嵌套文档:
items:{ name:banana } and items:{ stock:9 }
name:banana 匹配数组中的第一个文档,stock:9 匹配数组中的第三个文档。
items:{ name:banana and stock > 10 } and items:{ category:vegetable }
第一个嵌套组(名称:banana 和 stock > 10)必须匹配单个文档,但 category:vegetables 子查询可以匹配不同的嵌套文档,因为它位于单独的组中。
{ "level1": [ { "level2": [ { "prop1": "foo", "prop2": "bar" }, { "prop1": "baz", "prop2": "qux" } ] } ] }
要匹配单个嵌套文档:
level1.level2:{ prop1:foo and prop2:bar }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215781.html原文链接:https://javaforall.net
