Solución:
Utilice una agregación de términos en el color
campo. Y debe prestar atención a cómo se analiza el campo en el que desea obtener valores distintos, lo que significa que debe asegurarse de no estar tokenizándolo durante la indexación; de lo contrario, cada entrada en la agregación será un término diferente que forma parte de el contenido del campo.
Si aún desea la tokenización Y usar el terms
agregación que es posible que desee ver not_analyzed
tipo de indexación para ese campo, y tal vez use campos múltiples.
Agregación de términos para automóviles:
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
Para actualizar la excelente respuesta de Andrei Stefan, debemos decir que el parámetro de consulta search_type=count
ya no es compatible con Elasticsearch 5. La nueva forma de hacer esto es agregar "size" : 0
en el cuerpo como:
GET /cars/transactions/_search
{
"size": 0,
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
Personalmente, ambas respuestas me parecían arcanas y desesperadamente complejas cuando quería agregar varios filtros.
Para mí, lo que tenía sentido era ir a la pestaña Descubrir y aplicar los filtros que quería. Luego guardé mi búsqueda.
Luego, creé una nueva visualización de gráfico de barras usando mi búsqueda guardada. Luego modifiqué el eje X para usar la agregación de términos en función de mi campo de interés (en mi caso, nombres de usuario) y luego ordené por recuento. Asegúrese de que el tamaño sea algo grande, como 500.
Debería poder obtener los resultados en forma tabular debajo de su gráfico. Programación JSON simple y sin complejidad. Solo una serie de clics. Incluso puede guardar la visualización para más tarde.