繁体   English   中英

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

[英]Elastic search wildcard query crashes cluster

我在大型弹性搜索集群上运行以下查询。 群集无响应

{
  "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的数据。

请参阅Regexp Query文档 它明确指出以下内容:

注意:regexp查询的性能在很大程度上取决于所选的正则表达式。 匹配。*之类的东西非常慢

什么是理想的是改变了文本分析message与现场WordDelimiterTokenFilter并设置split_on_case_change为true。 然后,像NullPointerException这样的东西将被索引为三个单独的标记[Null, Pointer, Exception] 这可以帮助您在不使用正则表达式的exception下搜索exception 请注意,您需要重新索引所有文档。

另一种快速的,值得一试可能让您的过滤条件的主机名和时间戳在过滤背景下 ,这将运行你的正则表达式查询之前预过滤的文件。 在修复文本分析之前,这可能是您的短期解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM