我正在学习ElasticSearch,想计算不同的值。到目前为止,我可以计数值,但不能区分。
以下是示例数据:
curl http://localhost:9200/store/item/ -XPOST -d '{
"RestaurantId": 2,
"RestaurantName": "Restaurant Brian",
"DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'
curl http://localhost:9200/store/item/ -XPOST -d '{
"RestaurantId": 1,
"RestaurantName": "Restaurant Cecil",
"DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'
curl http://localhost:9200/store/item/ -XPOST -d '{
"RestaurantId": 1,
"RestaurantName": "Restaurant Cecil",
"DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'
到目前为止,我所尝试的是:
curl -XPOST "http://localhost:9200/store/item/_search" -d '{
"size": 0,
"aggs": {
"item": {
"terms": {
"field": "RestaurantName"
}
}
}
}'
输出量:
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"item": {
"buckets": [
{
"key": "restaurant",
"doc_count": 3
},
{
"key": "cecil",
"doc_count": 2
},
{
"key": "brian",
"doc_count": 1
}
]
}
}
}
如何将cecil
的计数设为1而不是2
5条答案
按热度按时间guz6ccqo1#
你必须使用基数选项,如@coder所提到的,你可以在doc中找到
这对我很有效。。
nkkqxpd92#
这里可以使用cardinality:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html
bakd9h0s3#
现在我为原作者回答这个问题已经太晚了,但是对于任何面临同样问题并到达这里的人来说,我的回答可能会有所帮助。
ES提供了基数以确保获得不重复计数,但它并不准确。为了准确,可以使用适当的解决方案。我写了一篇文章,可能会有帮助:Accurate Distinct Count and Values from Elasticsearch。
2guxujil4#
在ElasticSearch中不支持非重复计数,尽管存在非确定性计数。使用“terms”聚合并计算结果中的桶数。请参阅ElasticSearch问题上的不同计数。
dldeef675#
使用基数功能:文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html
范例: