更新 :已添加
我想对我的ElasticSearch集群执行唯一计数。该集群包含约5000万条记录。
我尝试了以下方法:
在本节中提到:
预计算哈希通常仅在非常大和/或高基数的字段上有用,因为它可以节省CPU和内存。
除非您将Elasticsearch配置为使用doc_values作为字段数据格式,否则使用聚合和构面对堆空间的要求 非常 高。
"my_prop": { "index": "not_analyzed", "fielddata": { "format": "doc_values" }, "doc_values": true, "type": "string", "fields": { "hash": { "type": "murmur3" } } }
当我在Kibana的my_prop.hash上使用唯一计数时,收到以下错误:
Data too large, data for [my_prop.hash] would be larger than limit
ElasticSearch的堆大小为2g。对于具有400万条记录的单个索引,上述操作也将失败。
由Kibana产生:http://pastebin.com/hf1yNLhE
http://pastebin.com/BFTYUsVg
该错误表明您没有足够的内存(更具体地,用于的内存fielddata)来存储来自中的所有值hash,因此您需要从堆中取出它们并将它们放在磁盘上,这意味着使用doc_values。
fielddata
hash
doc_values
既然你已经在使用doc_values了my_prop,我建议做同样的my_prop.hash(而且,不,从主字段中的设置不是由子域继承)"hash": { "type": "murmur3", "index" : "no", "doc_values" : true }。
my_prop
my_prop.hash
"hash": { "type": "murmur3", "index" : "no", "doc_values" : true }