So scrollen Sie mit der Scroll-API-Elasticsearch durch Daten

Nov 06 2020

Ich bin neu bei Elch Stack

  • Ich habe aus versucht , dies aber nicht Arbeitsfluss bekommen ..

  • Zum Beispiel unterhalb der Suchabfrage ausgeführt

POST <index-name>/_search?scroll=2m
{
  "query": {"match_all": {}}
}
  • und habe die scroll_id aus dieser Abfrage erhalten und dann versucht, den nächsten Stapel von Ergebnissen für eine scrollende Suche abzurufen
GET /_search/scroll
{
  "scroll_id" : "<scroll_id>"
}
  • habe das erste mal ergebnis bekommen
"took" : 2,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 13059,
      "relation" : "eq"
    }
  • Meine Frage ist, warum ich eine Fehlermeldung erhalte, wenn ich erneut versuche, mit derselben scroll_id zu scrollen
"caused_by" : {
      "type" : "search_context_missing_exception",
      "reason" : "No search context found for id"
  • Verwendete Versionen
Kibana 7.9.3
Elastic Search 7.9.3

Antworten

1 Val Nov 06 2020 at 11:43

Der scroll_idWert ändert sich bei jeder Antwort. Daher muss der nächste Suchaufruf die neue Bildlauf-ID aus der vorherigen Suchantwort verwenden.

Du hast richtig angefangen mit

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

In der Antwort, die Sie erhalten, _scroll_identhält ein aufgerufenes Feld die nächste Bildlauf-ID, die für den nächsten Aufruf verwendet werden soll (wie ein Cursor). Nennen wir es scroll_id_1:

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

In dieser nächsten Antwort erhalten Sie einen neuen _scroll_idWert (nennen wir ihn scroll_id_2), den Sie für den nächsten Aufruf verwenden müssen:

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

Und Sie machen so lange weiter, bis Sie eine leere Ergebnismenge erhalten. An diesem Punkt können Sie den Suchkontext löschen

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