更新:已添加
我想在我的ElasticSearch集群上执行唯一计数。 该群集包含大约5000万条记录。
我尝试过以下方法:
在this section中提到:
预计算哈希通常仅对非常大和/或高基数的字段有用,因为它可以节省CPU和内存。
在this section中提到:
除非您将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堆大小。 对于包含4百万条记录的单个索引,上述内容也失败了。
由Kibana生成: http://pastebin.com/hf1yNLhE
答案 0 :(得分:1)
该错误表示您没有足够的内存(更具体地说,fielddata
的内存)来存储来自hash
的所有值,因此您需要从堆中取出它们把它们放在磁盘上,意思是使用doc_values
。
由于您已经doc_values
用于my_prop
,我建议对my_prop.hash
执行相同操作(并且,不,主字段中的设置不会被子字段继承) :"hash": { "type": "murmur3", "index" : "no", "doc_values" : true }
。