Estoy usando elasticsearch para indexar mis documentos.
¿Es posible indicarle que solo devuelva campos particulares en lugar del documento json completo que ha almacenado?
elasticsearch
usuario1199438
fuente
fuente
Respuestas:
¡Sí! Usa un filtro fuente . Si está buscando con JSON, se verá así:
En ES 2.4 y versiones anteriores, también podría usar la opción de campos para la API de búsqueda :
Esto está en desuso en ES 5+. ¡Y los filtros fuente son más potentes de todos modos!
fuente
Encontré los documentos para
get api
que sean útiles, especialmente las dos secciones, Filtrado de origen y Campos : https://www.elastic.co/guide/en/elasticsearch/reference/7.3/docs-get.html#get-source- filtraciónAfirman sobre el filtrado de origen:
Lo cual se ajustaba perfectamente a mi caso de uso. Terminé simplemente filtrando la fuente así (usando la abreviatura):
Para su información, indican en los documentos sobre el parámetro de campos :
Parece atender los campos que se han almacenado específicamente, donde coloca cada campo en una matriz. Si los campos especificados no se han almacenado, obtendrá cada uno de _source, lo que podría resultar en recuperaciones 'más lentas'. También tuve problemas para intentar que devolviera campos de tipo objeto.
En resumen, tiene dos opciones, ya sea mediante el filtrado de origen o los campos [almacenados].
fuente
fuente
En Elasticsearch 5.x, el enfoque mencionado anteriormente está en desuso. Puede usar el enfoque _source, pero en ciertas situaciones puede tener sentido almacenar un campo. Por ejemplo, si tiene un documento con un título, una fecha y un campo de contenido muy grande, es posible que desee recuperar solo el título y la fecha sin tener que extraer esos campos de un campo _source grande:
En este caso, usarías:
Consulte la documentación sobre cómo indexar los campos almacenados. ¡Siempre feliz por un voto a favor!
fuente
fuente
respuesta_filtrado
https://stackoverflow.com/a/35647027/844700
fuente
Filtrado de fuente
Permite controlar cómo se devuelve el campo _source con cada golpe.
La palabra clave "incluye" define los campos específicos.
fuente
Se podría realizar una solicitud REST API GET con el parámetro '_source'.
Solicitud de ejemplo
Respuesta
}
fuente
Sí, mediante el uso del filtro fuente puede lograr esto, aquí está el filtro fuente de documentos
Solicitud de ejemplo
La salida será
fuente
En java puedes usar setFetchSource de esta manera:
fuente
Por ejemplo, tiene un documento con tres campos:
Si desea regresar
name
yscore
puede usar el siguiente comando:Si desea obtener algunos campos que coinciden con un patrón:
Quizás excluir algunos campos:
fuente
Con la API de Java, uso lo siguiente para obtener todos los registros de un conjunto de campos particulares:
fuente