query elastic aggs elasticsearch distinct

aggs - Encuentra valores distintos, no distintos conteos en elasticsearch



distinct elastic query (3)

Documentación de Elasticsearch sugiere * que su pieza de código

* documentación fijada

GET /cars/transactions/_search?search_type=count { "aggs": { "distinct_colors": { "cardinality": { "field": "color" } } } }

corresponde a la consulta sql

SELECT DISTINCT(color) FROM cars

pero en realidad corresponde a

SELECT COUNT(DISTINCT(color)) FROM cars

No quiero saber cuántos valores distintos tengo, sino cuáles son los valores distintos. ¿Alguien sabe como lograr eso?


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 hacerlo es agregar "size" : 0 en el cuerpo, como:

GET /cars/transactions/_search { "size": 0, "aggs": { "distinct_colors": { "terms": { "field": "color", "size": 1000 } } } }


Personalmente, las dos respuestas fueron arcanas para mí y muy complejas cuando quise agregar varios filtros.

Para mí, lo que tenía sentido era ir a la pestaña Descubrir y aplicar los filtros que quería. Entonces guardé mi búsqueda.

Luego, creé una nueva visualización de gráfico de barras con 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, los nombres de usuario) y luego ordené por Recuento. Asegúrese de que el tamaño es algo grande, como 500.

Debería poder obtener los resultados en forma de tabla debajo de su gráfico. Simple, y no hay programación JSON compleja. Sólo una serie de clics. Incluso puedes guardar la visualización para más tarde.


Utilice una agregación de términos en el campo de color . Y debe prestar atención a cómo se analiza ese campo para el que desea obtener valores distintos, lo que significa que debe asegurarse de que no lo está tokenizando al indexar, 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 para usar la agregación de terms , es posible que desee ver el tipo de indexación not_analyzed para ese campo, y tal vez usar 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 } } } }