Puntos clave: Las agregaciones ElasticSearch Permite a los usuarios agrupar y analizar datos de forma similar a la funcionalidad GROUP BY de SQL, como contar visitas web de los logs. Estas operaciones pueden ser complejas, permitiendo consultas anidadas.
- Las agregaciones pueden gestionar tipos numéricos y de palabras clave para un análisis eficiente de datos.
- Los tipos comunes incluyen agregaciones de cubos para contar ocurrencias.
ElasticSearch te permite hacer el equivalente a un SQL GROUP BY COUNT y funciones AVERAGE. A estas se les llama agregaciones. En otras palabras, si te son mirando los logs del servidor web nginx te podría:
- Agrupa cada registro de golpes web según la ciudad de donde proviene el usuario
- Cuéntalos
Así que esto te daría algo como:
| Ciudad | Web Hits |
| París | 20 |
| Londres | 30 |
| Berlín | 40 |
En SQL esto sería algo así como:
select city, count(city) from logs
group by city
Aquí ilustramos esto usando el caso de utiliza más sencillo: los logs web. Sigue la documentación anterior para llenar tu instancia de ElasticSearch con algunos logs del servidor web nginx si tú quieres seguir. Agregación Como ElasticSearch está preocupado por el rendimiento, son algunas reglas sobre qué tipo de campos te puedes agregar. te puede agrupar por cualquier campo numérico excepto por campos de texto que tienen que ser de tipo palabra clave o tener fielddata=true. te puede pensar en palabra clave como un índice. Cuando cargamos los datos nginx, no Crea el mapeo de índice primero. Dejamos que ElasticSearch construyera eso sobre la marcha. Así que eligió indexar todos los campos de texto ya que mapea los de palabra clave de tipo, así:
"geoip" : {
"dynamic" : "true",
"properties" : {
"city_name" : {
"type" : "text",
"norms" : false,
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
Ahora, las agregaciones están un tema complicado. Hay son muchas variaciones. te pueden anidarlas para construir consultas complejas. Aquí analizamos el caso más simple y común utiliza: la agregación de cubos. Que están como la sentencia SQL select, count para producir un conteo por valor. En el ejemplo siguiente, queremos contar los resultados web por el nombre de la ciudad. El patrón general para construir la sentencia están:
- Utiliza aggs, que están la abreviatura de agregaciones.
- Dale un nombre al AGG. Aquí utilizamos CityName.
- Dile qué campo usar. Aquí utiliza la notación de puntos geoip.city_name ya que city_name están una propiedad de geo_ip. En otras palabras, en una estructura JSON profundamente anidada, pon un punto como te bajar en la jerarquía. Para un array JSON, te utiliza scripting ElasticSearch, un tema que aún no hemos cubierto.
- Añade la palabra clave para decirle que utilize ese índice.
- Dámosle el tipo de operación de agregación. Aquí utiliza términos. te también puede utiliza averia (promedio) y algunos otros.
te también puede utiliza filtros, que ilustramos más adelante. Esta consulta produce un recuento de visitas web por ciudad.
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/_search?pretty -d '{
"aggs": {
"cityName": {
"terms": {
"field": "geoip.city_name.keyword",
"size": 10
}
Aquí son los resultados. Le dimos el tamaño por defecto de 10, es decir, hasta dónde debería llegar. Como tenemos 18 ciudades en nuestros datos, "sum_other_doc_count": 8 significa que dejó 8 registros. Recuerda que ElasticSearch tiene muchas reglas para mantener un alto rendimiento. Fíjate que debajo de cada uno con estos están un doc_count. Así que tuvimos 6 visitas web de la ciudad de Montpellier.
"aggregations" : {
"cityName" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 8,
"buckets" : [
{
"key" : "Montpellier",
"doc_count" : 6
},
{
"key" : "Suzano",
"doc_count" : 3
},
{
"key" : "Boardman",
"doc_count" : 2
},
{
"key" : "Mazatlán",
"doc_count" : 2
},
{
"key" : "New York",
"doc_count" : 2
},
{
"key" : "San Diego",
"doc_count" : 2
},
{
"key" : "Abadan",
"doc_count" : 1
},
{
"key" : "Ashburn",
"doc_count" : 1
},
{
"key" : "Bogotá",
"doc_count" : 1
},
{
"key" : "Cambe",
"doc_count" : 1
}
]
}
}
}
Aquí contamos los mismos datos por respuesta, por ejemplo, 200, 404, etc. Como responder está de tipo largo, no es necesario añadir palabra clave al final.
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/_search?pretty -d '{
"aggs": {
"responses": {
"terms": {
"field": "response",
"size": 10
}
}
}
}'
Aquí son los resultados. Como solo son 4 tipos de respuestas en nuestros datos, mostró todas desde entonces están < 10.
"aggregations" : {
"responses" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 200,
"doc_count" : 23
},
{
"key" : 400,
"doc_count" : 13
},
{
"key" : 404,
"doc_count" : 8
},
{
"key" : 304,
"doc_count" : 5
}
]
}
}
Añadir una consulta
Aquí están un ejemplo usando una consulta para filtrar los resultados. Esto está basado en datos de interacciones de medicamentos de la FDA que exploraremos en nuestras próximas publicaciones sobre analítica. Esta consulta cuenta las interacciones farmacológicas por tipo de fármaco, que es el propósito principal de la base de datos de la FDA: rastrear interacciones y efectos secundarios de los medicamentos. Así que esto es una consulta y subconsulta de agregación de tipos de cubo
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/fda/_search?pretty -d '{
"query": {
"term": {
"patient.drug.medicinalproduct.keyword": {
"value": "METRONIDAZOLE"
}
}
},
"aggs" : {
"drug": {
"terms" : {
"field": "patient.drug.medicinalproduct.keyword"
}
},
"adverseaffect" : {
"terms" : {
"field": "patient.reaction.reactionmeddrapt.keyword"
}
}
}
}'
Guía de ElasticSearch
- Tutorial de ElasticSearch para principiantes: Conceptos básicos de ElasticSearch
- Uso de Apache Hive con ElasticSearch
- Uso de ElasticSearch con Apache Spark
- Hoja de trucos de comandos de Curl ElasticSearch
- Ejemplo y explicación de actualización y explicación de Spark ElasticSearch Hadoop
- Cómo escribir datos de Apache Spark en ElasticSearch usando Python
- Sintaxis de búsqueda ElasticSearch y búsquedas booleanas y de agregación
- Consultas anidadas de ElasticSearch: Cómo buscar documentos incrustados
- ElasticSearch se une: Has_Child, consulta Has_parent
- Cómo configurar un clúster Elastic versión 7
- Cómo configurar Filebeat para nginx y ElasticSearch
- Uso de Beats y Logstash para enviar registros a ElasticSearch
- Cómo cargar un archivo CSV en ElasticSearch con Logstash
- Explicación de las agregaciones de ElasticSearch
- ¿Qué es el ELK Stack?
- Logstash 101: Uso de Logstash en una Canalización de Procesamiento de Datos
- Usar Kibana para ejecutar consultas en ElasticSearch usando el lenguaje de consultas Lucene y Kibana
- Aprendizaje automático ElasticSearch
- Cómo instalar Elastic Enterprise Search
- Cómo utilizar Elastic Enterprise Search con GitHub
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.