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)
答案 0 :(得分:1)
由于具有高基数字段值的群集上出现了内存问题,因此不建议使用设置大小:0。您只能使用1到2147483647之间的数字。
答案 1 :(得分:0)
根据documentation,聚合术语中大致计数的原因是由于碎片分组是偏向的'关于' top x'结果
如果您设置"size": 0
我非常确定Elasticsearch会返回准确的结果。