Lucene查询语言和KQL有什么区别
What is the difference between Lucene query language and KQL
Kibana 版本 >= 7.0 默认为搜索下拉菜单提供 KQL,但也支持似乎是旧的 Lucene 语法。
它经常在尝试搜索时恼人地抱怨 "You might be using Lucene but KQL is selected"。
转到建议的链接:
- https://www.elastic.co/guide/en/kibana/7.7/lucene-query.html
- https://www.elastic.co/guide/en/kibana/7.7/kuery-query.html
我看不出有什么不同。它们之间的主要区别是什么?有人可以提供突出显示这些差异的查询示例吗?
KQL and Lucene query syntax 的当前文档显示了两种查询的语法。我将总结主要区别:
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 文档概述了布尔运算符 or
、and
和 not
。大写版本(OR
、AND
和 NOT
)也有效。文档指定 and
的优先级高于 or
,这是通常的运算符优先级规则。
Lucene 文档指定了以下内容:
The preferred operators are +
(this term must be present) and -
(this term must not be present).
例如,brown +fox -news
指定brown
是可选的,fox
必须存在,news
不能存在。
Lucene 还支持 AND
、OR
和 NOT
,但只支持大写。因此,如果您尝试使用 and
,它将被视为字面词。此外,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文档没有提到正则表达式,模糊搜索,也没有提升;所以他们可能不受支持。 Lucene 支持它们。
Kibana 版本 >= 7.0 默认为搜索下拉菜单提供 KQL,但也支持似乎是旧的 Lucene 语法。 它经常在尝试搜索时恼人地抱怨 "You might be using Lucene but KQL is selected"。 转到建议的链接:
- https://www.elastic.co/guide/en/kibana/7.7/lucene-query.html
- https://www.elastic.co/guide/en/kibana/7.7/kuery-query.html
我看不出有什么不同。它们之间的主要区别是什么?有人可以提供突出显示这些差异的查询示例吗?
KQL and Lucene query syntax 的当前文档显示了两种查询的语法。我将总结主要区别:
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 文档概述了布尔运算符 or
、and
和 not
。大写版本(OR
、AND
和 NOT
)也有效。文档指定 and
的优先级高于 or
,这是通常的运算符优先级规则。
Lucene 文档指定了以下内容:
The preferred operators are
+
(this term must be present) and-
(this term must not be present).
例如,brown +fox -news
指定brown
是可选的,fox
必须存在,news
不能存在。
Lucene 还支持 AND
、OR
和 NOT
,但只支持大写。因此,如果您尝试使用 and
,它将被视为字面词。此外,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文档没有提到正则表达式,模糊搜索,也没有提升;所以他们可能不受支持。 Lucene 支持它们。