[英]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.