【发布时间】:2017-01-26 14:29:26
【问题描述】:
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)
【问题讨论】:
-
对于
terms聚合,ES 中的计数是准确和完整的,基数和百分位数聚合的唯一近似值是 (IIRC)。见:elastic.co/guide/en/elasticsearch/reference/current/… 和:elastic.co/guide/en/elasticsearch/reference/current/… -
术语聚合的文档也说计数也是近似的。想知道这是否由 size: 0 处理?
-
哈,从来没有注意到这一点。如果我没看错,大概计数的原因是由于分片存储对“前 x”结果存在“偏见”。所以我想如果你使用
size:0它应该是准确的,你怎么看? -
我认为你是对的。如果你这样回答我可以接受。
标签: elasticsearch