首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索通配符查询崩溃集群

弹性搜索通配符查询崩溃集群
EN

Stack Overflow用户
提问于 2018-02-14 13:41:05
回答 1查看 353关注 0票数 1

我在一个大型的弹性搜索集群上运行下面的查询。群集没有响应

代码语言:javascript
复制
{
  "size": 10000,
  "query": {
    "bool": {
      "must": [
        {
          "regexp": {
            "message": {
              "value": ".*exception.*"
            }
          }
        },
        {
          "bool": {
            "should": [
              {
                "term": {
                  "beat.hostname": "ip-xxx-xx-xx-xx"
                }
              }
            ]
          }
        },
        {
          "range": {
            "@timestamp": {
              "lt": 1518459660000,
              "format": "epoch_millis",
              "gte": 1518459600000
            }
          }
        }
      ]
    }
  }
}

当我删除带通配符的.*exception.*并将其替换为任何非通配符字符串(如xyz )时,它返回得很快。尽管查询使用通配符表达式,但它也会查找较小的时间范围和特定的主机。我认为这是一个非常简单的查询。为什么elasticsearch服务器不能处理这个查询?该集群有10个节点和20 TB的数据。

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 23:17:26

请参阅documentation for Regexp Query。它清楚地说明了以下几点:

注意:正则表达式查询的性能在很大程度上取决于所选择的正则表达式。像.*这样的东西都匹配起来非常慢

理想的做法是使用WordDelimiterTokenFilter更改message字段上的文本分析,并将split_on_case_change设置为true。然后,像NullPointerException这样的东西将被索引为三个单独的令牌[Null, Pointer, Exception]。这可以帮助您在不使用正则表达式的情况下在exception上搜索。需要注意的是,您需要对所有文档重新编制索引。

另一件快速尝试的事情可能是在filter context中保留对主机名和时间戳的过滤条件,这将在运行regexp查询之前对文档进行预过滤。在你修复文本分析之前,这可能是一个短期的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48780372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档