elasticsearch aggregation - 桶的精确计数

问题描述 投票:0回答:2

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

elasticsearch
2个回答
0
投票

根据documentation,聚合术语中近似计数的原因是由于关于“顶部x”结果的碎片争用是“偏向的”。

如果你设置"size": 0,我很确定Elasticsearch会返回准确的结果。


1
投票

设置大小:0现在已弃用,原因是具有高基数字段值的群集上存在内存问题。您只能使用1到2147483647之间的数字。

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

© www.soinside.com 2019 - 2024. All rights reserved.