¿Cómo obtendría los valores de todos languageslos 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
sizepará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]languagees posible que desee agregarsize=0yshard_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_thresholdpará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_thresholdconduce a resultados mucho más precisos.fuente
si desea obtener el primer documento para cada
languagevalor ú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