3 Pluspunkte 0 Minuspunkte

Ich habe Millionen von Datensätzen in einem Elasticsearch Index. Egal wie groß ich die size mache, ich sehe immer nur die ersten 10000 Ergebnisse. Ich habe gelesen das diese Limitierung fest in Elasticsearch verankert ist. Aber wie kann ich den Rest anzeigen?

{
  "size": 10000, 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "data.win.eventdata.authenticationPackageName": "NTLM"
          }
        },
        {
          "match": {
            "data.win.system.eventID": "4624"
          }
        },
        {
          "match": {
            "data.win.eventdata.logonType": "3"
          }
        }
      ]
    }
  }
}
von  

1 Antwort

2 Pluspunkte 0 Minuspunkte

Paging in Elasticsearch kannst du mit einem "search_after" Query oder Scrolling. Die Scroll-API ist älter aber einfacher. Angenommen das ist der Query

GET /wazuh-alerts*/_search
{
  "query": {
    "match_all": { }
  }
}

Das Ergebnis sieht in etwa so aus:

{
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 30,
    "successful" : 30,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        [...]
      }
    ]
  }
}

Um die Scroll-API zu aktivieren hänge den GET Parameter "scroll" an die URL an.

GET /wazuh-alerts-4.x-2025*/_search?scroll=1m
{
  "query": {
    "match_all": { }
  }
}

Das Schema des Ergebnis verändert sich dabei leicht.

{
  "_scroll_id": "FGluY2x1ZGVfY29ud[...]QwaHY4dzlFdw==",
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 30,
    "successful" : 30,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        [...]
      }
    ]
  }
}

Diese zusätzliche Scroll-ID am Beginn des Ergebnis kannst du jetzt verwenden, um in den Ergebnissen zu "blättern".

POST _search/scroll
{
  "scroll": "1m",
  "scroll_id": "FGluY2x1ZGVfY29ud[...]QwaHY4dzlFdw=="
}

Jeder zusätzliche Query, der mit dieser Scroll-ID abgesendet wird liefert somit die nächsten Ergebnisse für diese spezielle Abfrage und gleichzeitig eine neue Scroll-ID.

von (1.3k Punkte)