J'apprends la recherche élastique et aimerais compter des valeurs distinctes. Jusqu'à présent, je peux compter des valeurs mais pas distinctes.
Voici les exemples de données:
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"
}'
Et ce que j'ai essayé jusqu'à présent:
curl -XPOST "http://localhost:9200/store/item/_search" -d '{
"size": 0,
"aggs": {
"item": {
"terms": {
"field": "RestaurantName"
}
}
}
}'
Sortie:
{
"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
}
]
}
}
}
Comment puis-je compter cecil
comme 1 au lieu de 2
Vous devez utiliser l’option de cardinalité mentionnée par @coder que vous pouvez trouver dans le doc
curl -XGET "http://localhost:9200/store/item/_search" -d'
{
"aggs" : {
"restaurant_count" : {
"cardinality" : {
"field" : "RestaurantName",
"precision_threshold": 100,
"rehash": false
}
}
}
}'
Cela a fonctionné pour moi ...
Utilisation pourrait utiliser cardinalité ici: http://www.elasticsearch.org/guide/fr/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html
ElasticSearch ne prend pas en charge le comptage distinct, bien qu'il existe un comptage non déterministe. Utilisez l'agrégation de "termes" et comptez les compartiments dans le résultat. Voir Compte distinct sur recherche élastique question.