En Elasticsearch, una consulta de búsqueda puede ser tan simple como un documento único o resultados grandes y complejos que consta de millones de registros.
Esta guía concisa le enseñará a desplazarse a través de los documentos devueltos de una consulta de búsqueda utilizando la API de desplazamiento.
Es bueno tener en cuenta que el desplazamiento a través de los documentos utilizando la API de desplazamiento no se recomienda para las solicitudes en tiempo real. Es principalmente útil para procesar colecciones extensas de documentos.
Uso básico
En este ejemplo, usaremos el índice kibana_sample_data_flights. Puede encontrar los datos muestreados en la página de inicio de Kibana.
Supongamos que queremos obtener la cantidad de vuelos donde el precio del boleto fue mayor de 500 y menos de 1000, podemos realizar una consulta como:
Get /kibana_sample_data_flights /_search
"consulta":
"rango":
"A":
"GTE": 500,
"LTE": 1000,
"Boost": 2
Una vez que ejecutamos la solicitud anterior, debemos obtener todos los documentos dentro del rango especificado del precio del boleto.
A continuación se muestra una salida de ejemplo:
Como puede ver en la salida anterior, obtenemos más de 7800 resultados en una sola consulta.
Digamos que solo queremos ver un registro a la vez en lugar de todo el 7844. Podemos hacer esto utilizando los parámetros de Tamaño y de tamaño como se muestra en la consulta a continuación:
Get /kibana_sample_data_flights /_search
"De": 0,
"Tamaño": 1,
"consulta":
"rango":
"AvgticketPrice":
"GTE": 500,
"LTE": 1000,
"Boost": 2
En el ejemplo anterior, usamos el parámetro FROM que define qué índice debemos comenzar a obtener los registros. Dado que la indexación en Kibana comienza en 0, lo establecemos como el valor de índice inicial.
El parámetro de tamaño establece el número máximo de registros para mostrar por página.
Un ejemplo de los resultados está a continuación:
Como puede ver en la salida anterior, solo obtenemos un documento de un total de 7844.
Para desplazarse al siguiente documento, comenzamos desde 1 en lugar de 0. Como:
Get /kibana_sample_data_flights /_search
"de 1,
"Tamaño": 1,
"consulta":
"rango":
"AvgticketPrice":
"GTE": 500,
"LTE": 1000,
"Boost": 2
Esto recuperará el siguiente documento del resultado de la búsqueda.
Cuando se usa los parámetros de Tamaño y el tamaño, ElasticSearch lo limitará a solo 10,000 documentos.
La API de desplazamiento
La API de desplazamiento es útil en este momento. Podemos usarlo para recuperar una extensa colección de documentos de una sola solicitud.
La API de desplazamiento requiere un scroll_id que pueda obtener especificando el argumento de desplazamiento en la solicitud de consulta.
El argumento de desplazamiento debe especificar cuánto tiempo el contexto de búsqueda permanece vivo.
Veamos cómo usarlo en un ejemplo.
El primer paso es obtener el scroll_id, que podemos hacer pasando el parámetro de desplazamiento seguido de la duración del contexto de búsqueda.
Post /kibana_sample_data_flights /_search?desplazarse = 10m
"Tamaño": 100,
"consulta":
"rango":
"AvgticketPrice":
"GTE": 500,
"LTE": 1000,
"Boost": 2
En la solicitud de ejemplo anterior, establecemos el parámetro de desplazamiento con un contexto de búsqueda de 10 minutos. Luego especificamos el número de registros para recuperar por página y la consulta para que coincida.
La respuesta de la solicitud anterior debe incluir un scroll_id que podemos usar con la API de desplazamiento y los primeros 100 documentos que coinciden con la consulta especificada.
Para obtener el próximo lote de 100 registros, utilizamos la API de desplazamiento, incluida la ID de desplazamiento de la respuesta anterior.
Get /_Search /Scroll
"Scroll": "10m",
"scroll_id": "fGluy2x1zgvfy29udgv4df91dwlkdxf1zxj5qw5krmv0y2gbfko5wgq3vtbouzvlw"
En la solicitud anterior, especificamos que queremos usar la API de desplazamiento seguido del contexto de búsqueda. Esto le dice a Elasticsearch que actualice el contexto de búsqueda y lo mantenga vivo durante 10 minutos.
A continuación, pasamos el scroll_id que obtenemos de la solicitud anterior y recuperamos los 100 documentos posteriores.
Pensamientos finales
La API de desplazamiento es útil cuando necesita recuperar documentos de más de 10,000. A pesar de su funcionalidad, la API de desplazamiento tiene algunos inconvenientes abordados por otros métodos de paginación como Search_After.
Considere nuestro tutorial sobre Elasticsearch Pagination para obtener más información.