Elasticsearch te permite indexar datos de manera rápida y flexible. Pruébalo gratis en el cloud o ejecútalo localmente para ver lo fácil que puede ser indexar.
En este artículo, hablaremos de cómo mostrar los campos de un índice de Elasticsearch. Esto puede ser útil para entender la estructura de tus datos, identificar campos específicos y solucionar problemas. Vamos a tratar los siguientes temas:
- Uso de la API
_mappingpara recuperar información de campos - Uso de la API
_searchpara mostrar los valores de los campos - Visualización de subcampos
- _source sintética
- Campos de tiempo de ejecución
1. Uso de la API _mapping para recuperar información de campo
La API _mapping permite recuperar la definición de mapeo para un índice o varios índices. Esto incluye información sobre los campos, sus tipos de datos y otras propiedades. Para recuperar el mapeo de un índice específico, emplee la siguiente petición:
Por ejemplo, si tienes un índice llamado my_index, puedes recuperar su mapeo con la siguiente petición:
La respuesta incluirá la definición de mapeo para el índice, que contiene información sobre los campos y sus propiedades.
También es posible recuperar el mapeo de un campo específico. Esto puede ser útil si tu mapeo es bastante grande y solo quieres centrarte en un campo específico. Para recuperar el mapeo de un campo específico, emplee la siguiente petición:
También puedes recuperar las asignaciones de varios campos separando sus nombres con comas, como en la siguiente petición:
2. Uso de la API _search para mostrar los valores de los campos
Para mostrar los valores de los campos en un índice de Elasticsearch, puedes usar la API _search . La API _search te ofrece múltiples formas de controlar qué campos se devuelven; Los dos principales son:
_source: El campo_sourcecontiene el cuerpo original del documento JSON exactamente como estaba indexado, incluyendo cualquier cambio realizado por las canalizaciones de ingestión o pasos de preprocesamiento. Para mostrar campos específicos del documento fuente, implementa filtrado de fuentes como veremos a continuación.fields: El parámetrofieldste permite recuperar campos específicos de tus documentos al realizar una búsqueda, basándote en el mapeo de índice. A diferencia de_source,fieldstambién puede devolver valores de campos almacenados, valores de documentación o campos de ejecución sin referenciar la_source, aunque para campos estándar sin valores de documento ni configuraciones almacenadas, vuelve a_source. Esto puede aportar muchos beneficios como el rendimiento y más, como veremos a continuación.
Uso del campo _source
Por defecto, la API _search devuelve el campo _source , que contiene el documento JSON original que se indexó. Para mostrar campos específicos, puedes agregar filtros en el parámetro _source de la solicitud de búsqueda; Esto se llama filtrado de fuente.
Aquí tienes un ejemplo de una solicitud de búsqueda que devuelve los valores de los campos title y author para documentos en el índice my_index :
En este ejemplo, el parámetro _source especifica los campos que se deben devolver.
Si necesitas aún más control, puedes usar las propiedades de includes y excludes del objeto _source. Por ejemplo, la consulta siguiente devuelve el campo title de nivel superior y todos los subcampos de author excepto author.description.
En este ejemplo, usamos el patrón author.* para recuperar todos los subcampos directos del objeto author . Luego excluimos explícitamente author.description para que solo se devuelvan los otros campos de autor. Ten en cuenta que esto no tiene mejoras de rendimiento ya que aún tiene que cargar y analizar el JSON de origen, pero puede reducir el tamaño de la respuesta enviada por la red.
Uso del parámetro de campos
Puedes usar el parámetro fields para filtrar los campos que aparecen en la respuesta de búsqueda. Emplear fields _source ofrece varios beneficios, entre ellos:
- Mejora de rendimiento:
fieldspuede devolver valores directamente desde campos almacenados o valores de documentos sin tener que cargar toda la_source, haciendo que el tamaño de la carga útil de respuesta sea menor. - Salida formateada: Para campos estándar,
fieldspuede recurrir a_sourcepara obtener los valores, pero revisa el mapeo del índice para formatear correctamente la salida, como las fechas formateadas, haciéndolas consistentes con lo que se usa para agregaciones y ordenación. - Acceso a campos de tiempo de ejecución:
fieldspuede devolver campos de tiempo de ejecución, que no existen en el_sourceoriginal. - Aquí se pueden encontrar más beneficios.
Por ejemplo, para devolver solo los campos title y author en el índice my_index , puedes usar la siguiente solicitud de búsqueda:
En la consulta anterior, ponemos el campo _source en false para no devolver el documento fuente. Esto puede minimizar significativamente el tamaño de la carga útil para la respuesta, pero recuerda que esto solo funciona porque los campos title y author son del tipo keyword campo, que doc_values habilitaron por defecto. Si el campo no tiene doc_values activado y el _source está configurado como falso, Elasticsearch no tendría forma de recuperarlos y se omitiría en la respuesta.
Es importante señalar que la respuesta fields siempre devuelve un array de valores para cada campo, incluso si solo hay un único valor. Esto se debe a que Elasticsearch no tiene un tipo de array dedicado, y cualquier campo puede tener varios valores. Para más información sobre los arrays en Elasticsearch, haz clic aquí.
Otras formas de recuperar campos
Aunque recuperar campos usando _source o fields son los métodos recomendados, existen diferentes métodos disponibles para casos de uso específicos, como:
Campos de valor de documentos: Si quieres evitar _source por completo, puedes buscar usando el parámetro docvalue_fields . Los valores de documentación almacenan los mismos valores de campo que _source pero en una estructura de datos en disco, optimizada para ordenar y agregar.
Como está separado de los valores almacenados con _source, puedes aplicar campos específicos sin cargar toda la _source. Esto es útil si consultas documentos grandes pero solo necesitas unos pocos campos pequeños que soporten valores de documentos. Otro caso de uso para usar docvalue_fields es cuando quieres usar formato personalizado en campos date y numeric , como veremos en el ejemplo más abajo.
Ten en cuenta que esto solo funciona para campos que activas doc_values o para tipos de campos que lo tienen activado por defecto, como keyword, date, tipos numéricos y boolean, no para text o annotated_text.
En este ejemplo, usamos el parámetro docvalue_fields para recuperar los campos title, author, y published sin cargar el documento completo de _source :
Cuando se ejecuta esta consulta, Elasticsearch toma los valores directamente de su almacenamiento columnar en disco en lugar de referenciar el _source de cada documento. El campo published se devuelve con el formato epoch_millis en lugar del formato por defecto, gracias al parámetro format proporcionado en la consulta.
Campos almacenados: Si marcas explícitamente campos específicos como almacenados en el mapeo, puedes usar el parámetro stored_fields para filtrar esos campos. Esto es útil si quieres respuestas ligeras solo con esos campos específicos o para campos que almacenaste deliberadamente para recuperarlos después. Se almacena por separado de _source, por lo que este método también es útil para evitar la necesidad de cargar _source.
Es importante señalar que esta opción está desactivada por defecto y generalmente no se recomienda. Emplea filtrado de fuentes para devolver ciertos subconjuntos del documento fuente original.
En la consulta de ejemplo a continuación, usamos el parámetro stored_fields para recuperar el campo summary , que tiene la configuración de mapeo de índice "store”: true.
Cuando se ejecuta esta consulta, Elasticsearch busca si este campo está marcado con ”store”: true, si no lo encuentra, se saltará el campo por completo.
3. Visualización de subcampos
Si tu índice contiene subcampos, puedes usar la notación de puntos para especificar el camino de campo en el parámetro fields . Ten en cuenta que los subcampos son diferentes del tipo de campo anidado. Por ejemplo, si tienes un subcampo llamado address.city, puedes incluirlo en la respuesta de búsqueda así:
En este ejemplo, la respuesta de búsqueda incluirá los valores de los campos title, author address.city .
4. _source sintético
Si quieres mantener la funcionalidad de usar _source pero también ahorrar espacio en disco, tienes la opción de usar _source sintético en tu mapeo de índice. La_source sintética es una función que permite a Elasticsearch reconstruir el _source a partir de datos existentes como campos almacenados y valores de documentos, incluso cuando _source está desactivado. Esto te permite ahorrar mucho espacio de almacenamiento a cambio de velocidades ligeramente menores en el momento de la consulta, ya que la reconstrucción se realiza sobre la marcha. Activa esta función usando los valores que aparecen a continuación en la configuración de tu índice:
Algunos beneficios de usar _source sintéticos incluyen: visualización completa del documento al usar la API _search , filtrado de código fuente y compatibilidad con otras funciones y herramientas como Kibana que esperan _source estén disponibles, todo ello evitando la necesidad de almacenar el documento completo _source .
5. Campos de tiempo de ejecución
Los campos de ejecución te permiten definir campos guionizados en el momento de la consulta o en tu mapeo de índice bajo un bloque de ejecución. Estos campos nunca se indexan, por lo que agregar un campo en tiempo de ejecución no aumenta el tamaño del índice pero nunca aparecerá en _source. Los campos de ejecución definidos en el mapeo son persistentes y están disponibles para todas las consultas, mientras que los campos de ejecución definidos en el momento de la consulta son temporales y solo están disponibles en esa solicitud de búsqueda.
El principal beneficio de usar campos de tiempo de ejecución es la posibilidad de agregar campos a documentos luego de haberlos ingerido, simplificando así tus decisiones de mapeo. Los campos de ejecución también son ideales para enriquecer tus documentos con valores que no existen en el documento original pero que se generan mediante un script, como formatear una cadena o calcular un puntaje.
También cabe destacar que los campos de ejecución pueden perjudicar el rendimiento, ya que será necesario ejecutar un script para cada documento del conjunto de resultados. Para recuperar un campo de ejecución, también puedes usar el parámetro fields en la API _search .
Conclusión
Mostrar campos de un índice de Elasticsearch puede ir desde simplemente recuperar valores usando el mapeo de índice o el _source, hasta métodos más avanzados usando campos fields, docvalue_fieldso en tiempo de ejecución para mayor control y eficiencia. Comprender los compromisos entre diferentes métodos es clave para optimizar tus experiencias de búsqueda. Ya sea que estés optimizando cargas útiles, enriqueciendo documentos o empleando _source sintéticos para ahorrar espacio, Elasticsearch te ofrece múltiples herramientas y funciones para encontrar los datos que necesitas, de la manera que necesitas. Estas técnicas pueden ayudarte a entender la estructura de tus datos, identificar campos específicos y solucionar problemas.




