update query create _source elasticsearch

query - elasticsearch_source



Campo de tienda Elasticsearch vs_source (4)

Al habilitar _source se almacenará todo el documento JSON en el índice, mientras que la store solo almacenará los campos individuales que estén marcados de esa manera. Así que usar store podría ser mejor que usar _source si quieres ahorrar espacio en el disco.

Usando Elasticsearch 1.4.3

Estoy construyendo una especie de sistema de "informes". Y el cliente puede escoger y elegir qué campos quieren devolver en su resultado.

En el 90% de los casos, el cliente nunca seleccionará todos los campos, así que pensé que podía deshabilitar el campo _source en mi asignación para ahorrar espacio. Pero luego aprendí eso

GET myIndex/myType/_search/ { "fields": ["field1", "field2"] ... }

No devuelve los campos

Así que supongo que tengo que usar "store": verdadero para cada campo. Por lo que leí, esto será más rápido para las búsquedas, pero supongo que, en lo que respecta al espacio, será lo mismo que _source o aún ahorramos espacio.


El campo _source almacena el JSON que envía a Elasticsearch y puede elegir devolver solo ciertos campos si es necesario, lo cual es perfecto para su caso de uso. Nunca escuché que los campos almacenados serán más rápidos para las búsquedas. El campo _source podría ser más grande en el espacio del disco, pero si tiene que almacenar cada campo, no es necesario usar los campos almacenados sobre el campo _source . Si desactiva el campo fuente, significará:

  • No podrás hacer actualizaciones parciales
  • No podrá volver a indexar sus datos desde el JSON en su clúster Elasticsearch, tendrá que volver a indexar desde la fuente de datos (que suele ser mucho más lenta).

Clinton Gormley dice en el siguiente enlace

https://groups.google.com/forum/#!topic/elasticsearch/j8cfbv-j73g/discussion

  • de manera predeterminada, ES almacena su documento JSON en el campo _source, que está configurado como "almacenado"

  • de forma predeterminada, los campos en su documento JSON están configurados para NO ser "almacenados" (es decir, almacenados como un campo separado)

  • así que cuando ES devuelve su documento (buscar u obtener) simplemente carga el campo _source y lo devuelve, es decir, una única búsqueda de disco

Algunas personas piensan que al almacenar campos individuales, será más rápido que cargar todo el documento JSON del campo _source. De lo que no se dan cuenta es de que cada campo almacenado requiere una búsqueda de disco (¡10ms cada búsqueda!), Y que la suma de esas búsquedas supera con creces el costo de simplemente enviar el campo _source.

En otras palabras, casi siempre es una optimización falsa.


Por defecto en elasticsearch, el _source (el documento indexado) se almacena. Esto significa que cuando busca, puede recuperar la fuente real del documento. Además, elasticsearch extraerá automáticamente campos / objetos de _source y los devolverá si lo solicita explícitamente (y posiblemente los use en otros componentes, como resaltar).

Puede especificar que un campo específico también esté almacenado. Esto significa que los datos para ese campo se almacenarán "por sí solos". Lo que significa que si solicita "campo1" (que está almacenado), elasticsearch identificará que está almacenado y lo cargará del índice en lugar de obtenerlo del _source (suponiendo que _source esté habilitado).

¿Cuándo quieres habilitar el almacenamiento de campos específicos? La mayoría de las veces, no lo haces. Obtener el _source es rápido y extraerlo también es rápido. Si tiene documentos muy grandes, donde el costo de almacenar el _source, o el costo de analizar el _source es alto, puede mapear explícitamente algunos campos para almacenarlos.

Tenga en cuenta que hay un costo de recuperación de cada campo almacenado. Entonces, por ejemplo, si tiene un JSON con 10 campos con un tamaño razonable, y los mapea todos como almacenados, y los solicita a todos, esto significa cargar cada uno (más búsquedas de disco), en comparación con solo cargar el _source (que es un campo, posiblemente comprimido).

Obtuve esta respuesta en el enlace a continuación respondido por shay.banon, puedes leer todo este hilo para obtener una buena comprensión al respecto. ingrese la descripción del enlace aquí