Mostrar todos los resultados/depósitos de agregación de Elasticsearch y no solo 10

Resuelto Samuel Rizzo asked hace 10 años • 4 respuestas

Estoy intentando enumerar todos los depósitos de una agregación, pero parece que solo se muestran los primeros 10.

Mi búsqueda:

curl -XPOST "http://localhost:9200/imoveis/_search?pretty=1" -d'
{
   "size": 0, 
   "aggregations": {
      "bairro_count": {
         "terms": {
            "field": "bairro.raw"
         }
      }
   }
}'

Devoluciones:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 16920,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "bairro_count" : {
      "buckets" : [ {
        "key" : "Barra da Tijuca",
        "doc_count" : 5812
      }, {
        "key" : "Centro",
        "doc_count" : 1757
      }, {
        "key" : "Recreio dos Bandeirantes",
        "doc_count" : 1027
      }, {
        "key" : "Ipanema",
        "doc_count" : 927
      }, {
        "key" : "Copacabana",
        "doc_count" : 842
      }, {
        "key" : "Leblon",
        "doc_count" : 833
      }, {
        "key" : "Botafogo",
        "doc_count" : 594
      }, {
        "key" : "Campo Grande",
        "doc_count" : 456
      }, {
        "key" : "Tijuca",
        "doc_count" : 361
      }, {
        "key" : "Flamengo",
        "doc_count" : 328
      } ]
    }
  }
}

Tengo mucho más de 10 claves para esta agregación. En este ejemplo tendría 145 claves y quiero el recuento de cada una de ellas. ¿Hay alguna paginación en los depósitos? ¿Puedo conseguirlos todos?

Estoy usando Elasticsearch 1.1.0

Samuel Rizzo avatar Apr 08 '14 10:04 Samuel Rizzo
Aceptado

El parámetro de tamaño debe ser un parámetro para el ejemplo de consulta de términos:

curl -XPOST "http://localhost:9200/imoveis/_search?pretty=1" -d'
{
   "size": 0,
   "aggregations": {
      "bairro_count": {
         "terms": {
            "field": "bairro.raw",
             "size": 10000
         }
      }
   }
}'

Úselo size: 0para ES versión 2 y anteriores.

La configuración size:0está obsoleta a partir de 2.x, debido a problemas de memoria causados ​​en su clúster con valores de campo de alta cardinalidad. Puedes leer más sobre esto en la edición de github aquí .

Se recomienda establecer explícitamente un valor razonable para sizeun número entre 1 y 2147483647.

keety avatar Apr 08 '2014 03:04 keety

¿Cómo mostrar todos los depósitos?

{
  "size": 0,
  "aggs": {
    "aggregation_name": {
      "terms": {
        "field": "your_field",
        "size": 10000
      }
    }
  }
}

Nota

  • "size":10000Obtenga como máximo 10000 depósitos. El valor predeterminado es 10.

  • "size":0Como resultado, "hits"contiene 10 documentos por defecto. No los necesitamos.

  • De forma predeterminada, los depósitos están ordenados en doc_countorden decreciente.


¿Por qué recibo Fielddata is disabled on text fields by defaultun error?

Porque los datos de campo están deshabilitados en los campos de texto de forma predeterminada . Si no ha elegido explícitamente una asignación de tipo de campo, tiene las asignaciones dinámicas predeterminadas para campos de cadena .

Entonces, en lugar de escribir "field": "your_field"necesitas tener "field": "your_field.keyword".

kgf3JfUtW avatar Dec 19 '2017 23:12 kgf3JfUtW

Si desea obtener todos los valores únicos sin establecer un número mágico ( size: 10000), utilice AGREGACIÓN COMPUESTA (ES 6.5+) .

De la documentación oficial :

"Si desea recuperar todos los términos o todas las combinaciones de términos en una agregación de términos anidados, debe utilizar la AGREGACIÓN COMPUESTA que permite paginar todos los términos posibles en lugar de establecer un tamaño mayor que la cardinalidad del campo en la agregación de términos. La agregación de términos está destinada a devolver los términos principales y no permite la paginación".

Ejemplo de implementación en JavaScript:

const ITEMS_PER_PAGE = 1000;

const body =  {
    "size": 0, // Returning only aggregation results: https://www.elastic.co/guide/en/elasticsearch/reference/current/returning-only-agg-results.html
    "aggs" : {
        "langs": {
            "composite" : {
                "size": ITEMS_PER_PAGE,
                "sources" : [
                    { "language": { "terms" : { "field": "language" } } }
                ]
            }
        }
     }
};

const uniqueLanguages = [];

while (true) {
  const result = await es.search(body);

  const currentUniqueLangs = result.aggregations.langs.buckets.map(bucket => bucket.key);

  uniqueLanguages.push(...currentUniqueLangs);

  const after = result.aggregations.langs.after_key;

  if (after) {
      // continue paginating unique items
      body.aggs.langs.composite.after = after;
  } else {
      break;
  }
}

console.log(uniqueLanguages);
Expandir fragmento

Ilarion Halushka avatar Apr 07 '2020 16:04 Ilarion Halushka

Aumente el tamaño (segundo tamaño) a 10000 en sus agregaciones de términos y obtendrá el depósito de tamaño 10000. De forma predeterminada está configurado en 10. Además, si desea ver los resultados de la búsqueda, simplemente haga que el primer tamaño sea 1, puede consulte 1 documento, ya que ES admite tanto la búsqueda como la agregación.

curl -XPOST "http://localhost:9200/imoveis/_search?pretty=1" -d'
{
   "size": 1,
   "aggregations": {
      "bairro_count": {
         "terms": {
             "field": "bairro.raw",
             "size": 10000

         }
      }
   }
}'
wonder avatar Sep 09 '2018 08:09 wonder