我有一个中等大小的弹性搜索索引(1.46T 或 ~1e8 文档)。它运行在 4 台服务器上,每台服务器都有 64GB Ram 在弹性和操作系统之间平均分配(用于缓存)。
我想尝试新的“重要术语”聚合,所以我启动了以下查询......
{
"query": {
"ids": {
"type": "document",
"values": [
"xCN4T1ABZRSj6lsB3p2IMTffv9-4ztzn1R11P_NwTTc"
]
}
},
"aggregations": {
"Keywords": {
"significant_terms": {
"field": "Body"
}
}
},
"size": 0
}
它应该将指定的文档正文与索引的其余部分进行比较,并找到对文档重要但在索引中不常见的术语。
不幸的是,这总是导致
ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException:数据太大,数据将大于[25741911654]字节的限制];
嵌套:UncheckedExecutionException[org.elasticsearch.common.breaker.CircuitBreakingException:数据太大,数据将大于[25741911654]字节的限制];
嵌套:CircuitBreakingException[数据太大,数据将大于[25741911654]字节的限制];
一两分钟后,似乎暗示我没有足够的记忆。
有问题的弹性服务器实际上是虚拟机,所以我关闭了其他虚拟机并给每个弹性实例 96GB 和每个操作系统另外 96GB。
发生了同样的问题(不同的数字,花费的时间更长)。我手头没有可用内存超过 192GB 的硬件,所以不能再高了。
聚合不意味着对整个索引使用吗?我在查询格式方面犯了错误吗?