query - search request elasticsearch java
Actualización parcial en el campo que no está indexado (1)
Consideremos la siguiente situación: hay dos campos en el documento "artículo": contenido (cadena) y vistas (int). El campo de vistas no está indexado. El campo de vistas contiene información sobre cuántas veces se leyó este artículo.
También dijimos que los documentos son inmutables: no pueden cambiarse, solo reemplazarse. La API de actualización debe obedecer las mismas reglas. Externamente, parece que estamos actualizando parcialmente un documento en su lugar. Internamente, sin embargo, la API de actualización simplemente administra el mismo proceso de recuperar-cambiar-reindex que ya hemos descrito.
Pero, ¿y si hacemos una actualización particular del campo no indexado? ¿Elasearch reindexará todo el documento? Por ejemplo, quiero actualizar las vistas cada vez que alguien lee algún artículo. Si todo el documento se vuelve a indexar, no puedo actualizarlo en tiempo real (ya que es una operación demasiado pesada). Así que tendré que trabajar con retraso, por ejemplo actualiza todos los artículos que los visitantes leen cada 3-5-10 minutos. O entiendo algo mal?
Pero, ¿y si hacemos una actualización particular del campo no indexado? ¿Elasearch reindexará todo el documento?
Sí, aunque el campo de views
no está indizado individualmente, forma parte del campo _source
. El campo _source
contiene el JSON original que envió a Elasticsearch cuando indexó el documento y se devuelve en los resultados si hay coincidencia en el documento durante una búsqueda. El campo _source
está indexado con el documento en Lucene. En el script de actualización, está cambiando el campo _source
para que todo el documento vuelva a indexarse.
¿Podrías entonces evaluar la siguiente estrategia? Cada vez que alguien lee el artículo, le envío una actualización al elástico. Sin embargo, refresh_interval lo configuré en 30 segundos. ¿Esta estrategia será normal si durante un intervalo de 30 segundos, aproximadamente 1000 usuarios han leído un artículo?
Aún indexa los 1000 documentos, 1 documento se indexará como el documento actual, 999 documentos se indexarán como borrados y se eliminarán del índice durante la próxima combinación de Lucene.