Kibana:如何在 Kibana 中禁止查询中使用前置通配符查询

Kibana 搜索模块涵盖的一项搜索功能是可以在搜索中使用通配符。 但是通配符是要运行的极其昂贵的查询,尤其是前置通配符。 因此,你可能要考虑禁用前导通配符,以避免有人使用它们。在我之前的文章 “Elasticsearch:正确使用 regexp 搜索” 中,我已经详述了避免使用前置通配符查询。具体来说就是如下类型的查询:

GET my_example/_search
{
  "query": {
    "regexp": {
      "content": ".*work"
    }
  }
}

这样的查询在 Elasticsarch 中非常昂贵,一方面是 regexp 搜索本来就慢,代价很高,加之前置通配符查询,这样可能使得你的 Elasticsearch 非常繁忙 (如果你的数据量很大的情况下)。对于很多用户来说,可能希望避免这里的查询。我们可以在 Kibana 中来禁止这类的查询。请记住,尽管 Kibana 是两种查询语言:KQL 和 Lucene,所以你需要同时禁用两者。

 

禁止 KQL 前置通配符查询

我们首先打开 Kibana:

 

我们向下滚动屏幕:

针对 KQL 的搜索,我们点击上面的开关来禁止这项功能。一旦禁止后,我们来做一个实验。我们在 Kibana 中创建如下的一个 my_index:

PUT my_index/_doc/1
{
  "category": "sports"
}

我们接着为 my_index 创建 index pattern,并在 Discover 中进行搜索:

 在上面,我们看到了 my_index 的唯一文档。我们尝试如下的几个搜索:

显然 wildcard 的搜索是成功的。我们接着使用前置 willdcard 来进行搜索:

我们看到错误的信息,表明我的设置是起作用的。