example - Contar valores distintos utilizando elasticsearch
sub aggregation elasticsearch (3)
Estoy aprendiendo búsqueda elástica y me gustaría contar valores distintos. Hasta ahora puedo contar valores pero no distintos.
Aquí está la muestra de datos:
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"
}''
Y lo que probé hasta ahora:
curl -XPOST "http://localhost:9200/store/item/_search" -d ''{
"size": 0,
"aggs": {
"item": {
"terms": {
"field": "RestaurantName"
}
}
}
}''
Salida:
{
"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
}
]
}
}
}
¿Cómo puedo obtener el recuento de cecil
como 1 en lugar de 2
El uso podría usar cardinalidad aquí: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html
Tienes que usar la opción de cardinalidad mencionada por @coder que puedes encontrar en el documento
curl -XGET "http://localhost:9200/store/item/_search" -d''
{
"aggs" : {
"restaurant_count" : {
"cardinality" : {
"field" : "RestaurantName",
"precision_threshold": 100,
"rehash": false
}
}
}
}''
Esto funcionó para mí ...
No hay soporte para un conteo diferenciado en ElasticSearch, aunque existe un conteo no determinista. Utilice la agregación de "términos" y los conteos en el resultado. Vea Recuento distinto en la pregunta de búsqueda elástica .