ElasticSearch: Alle Dokumente im Index mit Python iterieren (bis zu 10000 Dokumente)

English Deutsch

Important Note: This simple approach only works for up to ~10000 documents. Prefer using our scroll-based solution: See ElasticSearch: How to iterate / scroll through all documents in index

Verwende diese Hilfsfunktion, um über alle Dokumente in einem Index zu iterieren

es_iterate_all_docs.py
def es_iterate_all_documents(es, index, pagesize=250, **kwargs):
    """
    Hilfsfunktion, um ALLE Werte aus zu iterieren
    Gibt alle Dokumente zurück.
    """
    offset = 0
    while True:
        result = es.search(index=index, **kwargs, body={
            "size": pagesize,
            "from": offset
        })
        hits = result["hits"]["hits"]
        # Stoppen, wenn keine Docs mehr da sind
        if not hits:
            break
        # Jeden Eintrag zurückgeben
        yield from (hit['_source'] for hit in hits)
        # Von dort fortsetzen
        offset += pagesize

Verwendungsbeispiel:

es_iterate_usage.py
for entry in es_iterate_all_documents(es, 'my_index'):
    print(entry) # Gibt das Dokument aus, wie es in der DB gespeichert ist

Wie es funktioniert

Du kannst über alle Dokumente in einem Index in ElasticSearch iterieren, indem du Abfragen wie diese verwendest:

es_query_pagination.json
{
    "size": 250,
    "from": 0
}

und "from" nach jeder Iteration um "size" erhöhst.


Check out similar posts by category: Databases, ElasticSearch, Python