具有嵌套聚合的Elasticsearch查询导致内存不足

我安装了Elasticsearch 16GB的内存.我开始使用聚合,但在尝试发出以下查询时遇到“ java.lang.OutOfMemoryError: Java堆空间”错误
POST /test-index-syslog3/type-syslog/_search
{
    "query": {
        "query_string": {
           "default_field": "DstCountry","query": "CN"
        }
    },"aggs": {
        "whatever": {
            "terms": {
                "field" : "SrcIP"
            },"aggs": {
                "destination_ip": {
                    "terms": {
                        "field" : "DstIP"
                    },"aggs": {
                        "port" : {
                            "terms": {
                                "field" : "DstPort"
                            }
                        }
                    }
                }
            }
        }
    }
}

query_string本身只返回1266次点击,所以我对OOM错误感到有点困惑.

错误地使用聚合吗?如果没有,我该怎么做才能解决这个问题?
谢谢!

您正在将整个SrcIP,DstIP和DstPort字段加载到内存中以便在它们上进行聚合.这是因为Elasticsearch将整个字段取消反转,以便能够快速查找给定其ID的字段的文档值.

如果您要在很大程度上聚合一小组数据,则应该是look into using docvalues.然后,文档的值以一种方式存储,以便在给定文档ID的情况下轻松查找.它有更多的开销,但是这样你就可以把它留给操作系统的字段缓存来将相关页面放在内存中,而不必加载整个字段.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...