ElasticSearch + Kibana - 使用预先计算的哈希值的唯一计数

时间:2015-06-10 20:35:06

标签: elasticsearch kibana-4

更新:已添加

我想在我的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百万条记录的单个索引,上述内容也失败了。

我的问题

  1. 我的配置中遗漏了什么?
  2. 我应该增加机器吗?这似乎不是可扩展的解决方案。
  3. ElasticSearch查询

    由Kibana生成: http://pastebin.com/hf1yNLhE

    ElasticSearch Stack trace

    http://pastebin.com/BFTYUsVg

1 个答案:

答案 0 :(得分:1)

该错误表示您没有足够的内存(更具体地说,fielddata的内存)来存储来自hash的所有值,因此您需要从堆中取出它们把它们放在磁盘上,意思是使用doc_values

由于您已经doc_values用于my_prop,我建议对my_prop.hash执行相同操作(并且,不,主字段中的设置不会被子字段继承) :"hash": { "type": "murmur3", "index" : "no", "doc_values" : true }