Como rolar dados usando Scroll API elasticsearch

Nov 06 2020

eu sou novo no elk stack

  • Eu tentei com isso, mas não obtive o fluxo de trabalho ..

  • por exemplo executado abaixo da consulta de pesquisa

POST <index-name>/_search?scroll=2m
{
  "query": {"match_all": {}}
}
  • e obtivemos o scroll_id dessa consulta, em seguida, tentei Recuperar o próximo lote de resultados para uma pesquisa de rolagem.
GET /_search/scroll
{
  "scroll_id" : "<scroll_id>"
}
  • obteve resultado na primeira vez
"took" : 2,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 13059,
      "relation" : "eq"
    }
  • minha pergunta é por que estou recebendo um erro quando tentei rolar novamente usando o mesmo scroll_id
"caused_by" : {
      "type" : "search_context_missing_exception",
      "reason" : "No search context found for id"
  • Versões usadas
Kibana 7.9.3
Elastic Search 7.9.3

Respostas

1 Val Nov 06 2020 at 11:43

O scroll_idvalor muda a cada resposta. Portanto, a próxima chamada de pesquisa precisa usar o novo ID de rolagem da resposta de pesquisa anterior.

Você começou corretamente com

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

Na resposta que você obtém, um campo chamado _scroll_idcontém o próximo ID de rolagem para usar na próxima chamada (como um cursor), vamos chamá-lo scroll_id_1:

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

Na próxima resposta, você obtém um novo _scroll_idvalor (vamos chamá-lo scroll_id_2) que precisa ser usado na próxima chamada:

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

E você continua fazendo isso até obter um conjunto de resultados vazio, momento em que pode limpar o contexto de pesquisa

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