tutorial primeros pasos index elastic documentacion crear elasticsearch elasticsearch-aggregation

primeros - ElasticSearch-Cómo mostrar un nombre de campo adicional en la consulta de agregación



elasticsearch tutorial (4)

¿Cómo puedo agregar una nueva clave llamada ''agency_name'' en mi cubo de salida?

Estoy ejecutando un código de agregación como se muestra a continuación

{ "aggs": { "name": { "terms": { "field": "agency_code" } } } }

Voy a recibir la salida como

"aggregations": { "name": { "doc_count_error_upper_bound": 130, "sum_other_doc_count": 39921, "buckets": [ { "key": "1000", "doc_count": 105163 }, { "key": "2100", "doc_count": 43006 } ] } }

Mientras se muestra, necesito mostrar el nombre de la agencia, el código y doc_count

¿Cómo puedo modificar la consulta de agregación para poder obtener el siguiente formato? Soy nuevo en ElasticSearch, no estoy seguro de cómo solucionar este problema

"aggregations": { "name": { "doc_count_error_upper_bound": 130, "sum_other_doc_count": 39921, "buckets": [ { "key": "1000", "doc_count": 105163, "agency_name": ''Agent 1'' }, { "key": "2100", "doc_count": 43006, "agency_name": ''Agent 2'' } ] } }

Datos de muestra en ElasticSearch (los campos son analizados)

{ "_index": "feeds", "_type": "news", "_id": "22005", "_version": 1, "_score": 1, "_source": { "id": 22005, "name": "Test News", "agency_name": "Agent 1", "agency_code": "1000", } }


Creo que necesitarías agregarle otros "aggs". Pero no estaría en el formato en el que desea, pero como otro campo en la salida, la razón es que actualmente está agregando según el "código de agencia" y la cuenta_doc muestra cuántas veces se produce el código de la agencia en particular. Ahora, cuando desee agregarlo en función de "nombre_agencia", el campo podría ser de diferentes documentos que "código de agencia" y también en números diferentes, si siempre existen en par que esta indexación padre-hijo podría ser de alguna ayuda.

https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-parent-child.html


ES no tiene forma de saber el nombre de la agency_name y el mapa de la agency_code uno a uno. Por lo tanto, recomendaría una serie de posibles estrategias.

  • No analice agency_name y use el término agg en ese campo. Me sorprendería si realmente tuviera que hacer tokenización del nombre de la agency_name .
  • Almacene la asignación de ID a nombre en una base de datos relacional o en una caché de archivos sin formato y realice la combinación del lado del cliente
  • Almacene los documentos de la agencia como otro tipo y haga dos llamadas. El primero en obtener los ID y luego el segundo para buscar las agencias por ID

Como Aditya Patel mencionó anteriormente, las relaciones entre padres e hijos también pueden ayudar, pero creo que todavía tendrá que usar una de las estrategias anteriores para resolver el mapeo de id-> name.



Puedes usar la agregación de los mejores hits como en el enlace de abajo. El formato será ligeramente diferente, ya que la creación de la agregación adicional incrustará el nombre de la agencia bajo otra tecla de "aciertos".

Agregando campos adicionales a la agregación de términos de ElasticSearch

{ "aggs": { "name": { "terms": { "field": "agency_code" }, "aggs": { "agency_names" : { "top_hits": { size: 1, _source: { include: [''agency_name''] } } } } } } }