Cómo desplazar datos usando Scroll API elasticsearch

Nov 06 2020

soy nuevo en elk stack

  • He intentado con esto pero no obtengo el flujo de trabajo.

  • por ejemplo ejecutado debajo de la consulta de búsqueda

POST <index-name>/_search?scroll=2m
{
  "query": {"match_all": {}}
}
  • y obtuve el scroll_id de esta consulta y luego intenté Recuperar el siguiente lote de resultados para una búsqueda de desplazamiento.
GET /_search/scroll
{
  "scroll_id" : "<scroll_id>"
}
  • obtuve resultado la primera vez
"took" : 2,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 13059,
      "relation" : "eq"
    }
  • mi pregunta es por qué recibo un error cuando intenté desplazarme de nuevo usando el mismo scroll_id
"caused_by" : {
      "type" : "search_context_missing_exception",
      "reason" : "No search context found for id"
  • Versiones utilizadas
Kibana 7.9.3
Elastic Search 7.9.3

Respuestas

1 Val Nov 06 2020 at 11:43

El scroll_idvalor cambia en cada respuesta. Entonces, la próxima llamada de búsqueda debe usar el nuevo ID de desplazamiento de la respuesta de búsqueda anterior.

Empezaste correctamente con

POST <index-name>/_search?scroll=2m
{
  "query": {"match_all": {}}
}

En la respuesta que obtiene, un campo llamado _scroll_idcontiene el siguiente id de desplazamiento para usar en la siguiente llamada (como un cursor), llamémoslo scroll_id_1:

GET /_search/scroll
{
  "scroll_id" : "<scroll_id_1>",
  "scroll": "2m"
}

En esa siguiente respuesta, obtienes un nuevo _scroll_idvalor (llamémoslo scroll_id_2) que necesitas usar para la próxima llamada:

GET /_search/scroll
{
  "scroll_id" : "<scroll_id_2>",
  "scroll": "2m"
}

Y continúe haciéndolo hasta que obtenga un conjunto de resultados vacío, momento en el que puede borrar el contexto de búsqueda

DELETE /_search/scroll
{
  "scroll_id" : "<scroll_id_n>"
}