我安装了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的情况下轻松查找.它有更多的开销,但是这样你就可以把它留给操作系统的字段缓存来将相关页面放在内存中,而不必加载整个字段.