0
点赞
收藏
分享

微信扫一扫

KQL和Lucene的区别


简介

说明

        本文介绍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​​

1.下拉建议

        KQL 可以在您键入查询时获取有关字段、值和运算符的建议,而在使用 Lucene 时则不存在此功能。 (此功能需要“基本层”或更高级别。)

2. 范围查询

查找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}

3. 操作符

KQL 文档

 bool 运算符 or , and和 not .大写版本( OR 、 AND 和 NOT )也有效。该文档指定 and比 or 有更高的优先级,这是通常的运算符优先规则。

Lucene 文档

        Lucene 也支持 AND , OR和 NOT ,但仅限大写。所以,如果你尝试使用 and ,它将被视为字面词。

        Lucene 推荐使用 + (条目必须存在) 和- (条目不能存在)。例如:brown +fox -news指定 brown是可选的,fox必须存在,并且 news不得存在。

        Lucene 支持 && , ||和 ! 。但是,文档指出所有这些运算符都不遵守通常的运算符优先级规则,并建议在同时使用多个运算符时使用括号。

4. 存在查询

查找包含字段 response 的文档

KQL 语法: response:*

Lucene 语法:_exists_:response ( response:* 也适用于 Lucene,但如果该字段的值为空字符串时的行为可能会有所不同)。

5. 通配符

通配符的种类

KQL:文档只提到了 *通配符,匹配零个或多个字符。没有提到 ?。

Lucene:*通配符,匹配零个或多个字符;?匹配单个字符。

通配符的转义

KQL:将通配符用作通配符时从不需要转义通配符,因此我们可以使用类似 book.*:(quick or brown). 的内容。

Lucene:通配符作为字段名的一部分似乎需要转义。给出的例子是 book.\*:(quick OR brown) .

6. 嵌套查询

根据文档,嵌套查询的语法有所不同。

7. Lucene 的额外功能

KQL 文档没有提到正则表达式、模糊搜索和 boosting;所以它们可能不受支持。 Lucene 支持他们。

举报

相关推荐

0 条评论