¿Cómo obtendría los valores de todos languages
los registros y los haría únicos?
Registros
PUT items/1
{ "language" : 10 }
PUT items/2
{ "language" : 11 }
PUT items/3
{ "language" : 10 }
Consulta
GET items/_search
{ ... }
# => Expected Response
[10, 11]
Cualquier ayuda sería genial.
elasticsearch
ChuckJHardy
fuente
fuente
fields: [languages]
dará solo los valores del campo dado, pero hacerlos únicos es probablemente más fácil de hacer en código. Aunque puede haber una agregación útil que puede hacerlo por usted.Respuestas:
Puede usar los términos agregación .
Una búsqueda devolverá algo como:
El
size
parámetro dentro de la agregación especifica el número máximo de términos para incluir en el resultado de la agregación. Si necesita todos los resultados, configúrelo en un valor que sea mayor que la cantidad de términos únicos en sus datos.fuente
"fields" : ["language"]
trae de vuelta el mismo resultado. ¿Puede ampliar su respuesta para ver si el marco de agregación puede devolver solo los valores del idioma?#=> [10, 11, 10]
language
es posible que desee agregarsize=0
yshard_size=0
, para asegurarse de obtener todos los valores. Ver elasticsearch.org/guide/en/elasticsearch/reference/current/…Elasticsearch 1.1+ tiene la agregación de cardinalidad que le dará un recuento único
Tenga en cuenta que en realidad es una aproximación y la precisión puede disminuir con los conjuntos de datos de alta cardinalidad, pero en general es bastante precisa en mis pruebas.
También puede ajustar la precisión con el
precision_threshold
parámetro. La compensación, o curso, es el uso de memoria.Este gráfico de los documentos muestra cómo un valor más alto
precision_threshold
conduce a resultados mucho más precisos.fuente
si desea obtener el primer documento para cada
language
valor único de campo, puede hacer esto:fuente
Estoy buscando este tipo de solución para mí también. Encontré referencia en términos de agregación .
Entonces, de acuerdo con lo siguiente, es la solución adecuada.
Pero si te encuentras con el siguiente error:
En ese caso, debe agregar " PALABRA CLAVE " en la solicitud, como se indica a continuación:
fuente
Si desea obtener todos los valores únicos sin ninguna aproximación o establecer un número mágico (
size: 500
), use 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 usar la AGREGACIÓN COMPUESTA que permite paginar sobre 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 debe devolver los términos principales y no permite la paginación ".
Ejemplo de implementación en JavaScript:
fuente