elasticsearch aggregation - 桶的精确计数

时间:2016-09-19 00:58:08

标签: elasticsearch

Elasticsearch新手问题。我将shakespeare.json加载到Elastic中,我试图弄清楚如何进行类似于select speaker, count(1) from line group by speaker的聚合。 (“Line”是文档的类型,“speaker”是其中一个属性。)

现在我有这样的查询:

{
  "size": 0,
  "query": {
    "query": {
      "match": {
        "play_name": "HAMLET"
      }
    }
  },
  "aggs": {
    "line_count": {
      "terms": {
        "field": "speaker.speaker_raw"
      }
    }
  }
}

结果看起来正确,但ElasticSearch文档指定术语聚合的文档计数是近似值(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html)。还有其他一些魔法来获取存储桶中的确切数量吗?

另外,我已经发现我必须在索引上预先定义一个字段,以获得未分析的“发言人”版本,以确保我可以聚合原始字段值,而不是标记化。 (见Elasticsearch - Cardinality over Full Field Value

2 个答案:

答案 0 :(得分:1)

由于具有高基数字段值的群集上出现了内存问题,因此不建议使用设置大小:0。您只能使用1到2147483647之间的数字。

来源:https://github.com/elastic/elasticsearch/issues/18838

答案 1 :(得分:0)

根据documentation,聚合术语中大致计数的原因是由于碎片分组是偏向的'关于' top x'结果

如果您设置"size": 0我非常确定Elasticsearch会返回准确的结果。