原文网址:KQL和Lucene的区别_IT利刃出鞘的博客-CSDN博客
说明
本文介绍KQL和Lucene的区别。
KQL和Lucene都是Kibana支持的查询语言,这两种语言差别不大。
官网网址
KQL语法:https://www.elastic.co/guide/en/kibana/7.7/kuery-query.html
Lucene语法:Lucene query syntax | Kibana Guide [7.7] | Elastic
KQL 可以在您键入查询时获取有关字段、值和运算符的建议,而在使用 Lucene 时则不存在此功能。 (此功能需要“基本层”或更高级别。)
查找count大于或等于 5
KQL 语法: count:>=5
Lucene 语法: count:[5 TO *]
查找account_number大于或等于 100,但小于 200
KQL 语法: account_number:>=100 and account_number:<200
Lucene 语法: account_number:[100 TO 200}
KQL 文档
bool 运算符 or , and和 not .大写版本( OR 、 AND 和 NOT )也有效。该文档指定 and比 or 有更高的优先级,这是通常的运算符优先规则。
Lucene 文档
Lucene 也支持 AND , OR和 NOT ,但仅限大写。所以,如果你尝试使用 and ,它将被视为字面词。
Lucene 推荐使用 + (条目必须存在) 和- (条目不能存在)。例如:brown +fox -news指定 brown是可选的,fox必须存在,并且 news不得存在。
Lucene 支持 && , ||和 ! 。但是,文档指出所有这些运算符都不遵守通常的运算符优先级规则,并建议在同时使用多个运算符时使用括号。
查找包含字段 response 的文档
KQL 语法: response:*
Lucene 语法:_exists_:response ( response:* 也适用于 Lucene,但如果该字段的值为空字符串时的行为可能会有所不同)。
通配符的种类
KQL:文档只提到了 *通配符,匹配零个或多个字符。没有提到 ?。
Lucene:*通配符,匹配零个或多个字符;?匹配单个字符。
通配符的转义
KQL:将通配符用作通配符时从不需要转义通配符,因此我们可以使用类似 book.*:(quick or brown). 的内容。
Lucene:通配符作为字段名的一部分似乎需要转义。给出的例子是 book.\*:(quick OR brown) .
根据文档,嵌套查询的语法有所不同。
KQL 文档没有提到正则表达式、模糊搜索和 boosting;所以它们可能不受支持。 Lucene 支持他们。