我们知道在 Kibana 中,我们可以实现三种搜索
-
DSL 搜索,你可以参照我之前的文章 “
开始使用Elasticsearch (2)
” 进行详细了解
-
KQL 搜索,你可以参照我之前的文章 “
Kibana: 如何使用 Search Bar
”
-
Lucene 搜索,你可以参照我之前的文章 “
Kibana: 如何使用 Search Bar
”
在这三种搜索方法中,DSL 以及 Lucene 搜索可以支持模糊查询 (fuzziness) 以及 通配符查询 (Regex)。KQL 是 Search Bar 的默认搜索方式,但是它不支持模糊查询。今天我们来重点介绍一下如何通过 Lucene 搜索来实现模糊查询以及通配符查询。那么我们该如何进行 Lucene 查询呢?
在默认的情况下,KQL (Kibana Query Language)是 Search Bar 的默认搜索语言。它的好处是具有自动完成功能,比如:
为了实现切换到 Lucene 搜索,我们点击上面的 KQL:
我们点击上面的开关:
这样我们的 Search Bar 的搜索方式就变成了 Lucene 的搜索方式了。在 Lucene 搜索模式下,autocomplete 功能将消失。我们需要记住完整的搜索命令才可以。
在今天的练习中,我们将展示如何在 Search Bar 中实现模糊查询以及通配符查询。为此,我们创建如下的一个文档:
PUT my_index/_doc/1
"content": "I like the articles from liuxg"
在 Kibana 的 console 中输入上面的命令。这样我们就创建一个叫做 my_index 的索引,并且它含有一个文档。如果我们想使用 DSL 来实现这个模糊查询,我们可以这么做:
GET my_index/_search
"query": {
"match": {
"content": {
"query": "liuxo",
"fuzziness": 1
上面标明,如果有一个拼写错误,我们也可以搜索到上面的文档。当然,我们也可以把 fuziness 设置为 2,或者是 auto,依据自己的需要。如果你想了解更多的关于模糊查询的知识,请参阅我的文章 “Elasticsearch:fuzzy 搜索 (模糊搜索)”。
我们也可以实现通配符的搜索:
GET my_index/_search
"query": {
"wildcard": {
"content": "liux?"
那么我们该如何来在 Search Bar 中实现同样的搜索呢?答案是使用 Lucene 搜索。
在 Search Bar 中实现模糊搜索及通配符搜索
首先,我们必须为 my_index 来创建一个 index pattern,以便能够在 Discover 中进行使用:
点击上面的 Create index pattern。这样就创建了 my_index 的索引模式。
我们打开 Discover,并装载 my_index 索引模式。我们首先切换到 Lucene 搜索模式:
通配符搜索
我们可以使用如下的方法来进行通配符搜索:
这里的 ? 代表是一个字符。这种搜索在 KQL 中是没有的。当然我们也可以进行如下的搜索:
我们还可以进行如下的搜索:
这里的 * 表示匹配多个字符。这种方式在 KQL 中也被支持。
我们可以使用如下的方式来进行模糊查询。通常使用于我们不知道具体需要搜索的文字是什么,或者是因为我们错误地输入一些词:
这里的 ~1 代表允许其中的一个字母是错误的。如果你可以允许两个字母的错误,你可以使用如下的方法:
在上面,我们有两个字母是错误的,但是我们还是可以能检索到结果。
当我们不知道到底是几个字母错误时,我们可以使用如下的方法来进行:
我们使用 ~auto 来表示。正如上面所示,当我们使用 auto 时,有两个字母错误时搜索不到结果。这个是由 Elasticsearch 自己决定到底是使用1个错误还是2个错误。当字符串的长度超过5时,fuziness 自动设置为2;如果字符串的长度少于2时,那么 fuziness 自动被设置为0.
我们修改上面的搜索,只出现一个字母的错误,我们还是使用 auto:
从上面的结果中,我们可以看出来我们可以搜索到我们想要的结果。
我们知道在 Kibana 中,我们可以实现三种搜索DSL 搜索,你可以参照我之前的文章 “开始使用Elasticsearch (2)” 进行详细了解 KQL 搜索,你可以参照我之前的文章 “Kibana: 如何使用 Search Bar” Lucene 搜索,你可以参照我之前的文章 “Kibana: 如何使用 Search Bar”在这三种搜索方法中,DSL 以及 Lucene 搜索可以支持模糊查询 (fuzziness) 以及 通配符查询 (Regex)。KQL 是 Search Bar 的默认