Když upravujete data v indexu Elasticsearch, může to vést k prostojům, protože funkce budou dokončeny a data budou znovu indexována.
Tento kurz vám poskytne mnohem lepší způsob aktualizace indexů, aniž by došlo k prostojům s existujícím zdrojem dat. Pomocí rozhraní API pro opětovné indexování Elasticsearch zkopírujeme data z konkrétního zdroje do jiného.
Pojďme začít.
POZNÁMKA: Než začneme, jsou operace reindexování náročné na prostředky, zejména u velkých indexů. Chcete-li minimalizovat čas potřebný pro opětovnou indexaci, deaktivujte number_of_replicas nastavením hodnoty na 0 a povolte je po dokončení procesu.
Povolit pole _Source
Operace opětovného indexování vyžaduje, aby bylo ve všech dokumentech ve zdrojovém indexu povoleno zdrojové pole. Všimněte si, že zdrojové pole není indexováno a nelze jej prohledávat, ale je užitečné pro různé požadavky.
Pole _Source povolte přidáním položky, jak je znázorněno níže:
PUT index_1„Mapování“:
"_source":
"enabled": true
Znovu indexovat všechny dokumenty
Chcete-li znovu indexovat dokumenty, musíme určit zdroj a cíl. Zdrojem a cílem může být existující index, alias indexu a datové toky. Můžete použít indexy z místního nebo vzdáleného klastru.
POZNÁMKA: Aby indexování proběhlo úspěšně, zdroj ani cíl nemohou být podobné. Cíl musíte také nakonfigurovat podle potřeby před opětovnou indexací, protože neaplikuje nastavení ze zdroje ani z žádné přidružené šablony.
Obecná syntaxe pro reindexaci je následující:
POST / _reindexZačněme vytvořením dvou indexů. První bude zdroj a druhý cíl.
PUT / source_index"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "aliasy":
"alias_1": ,
"alias_2":
"filter": "term":
"uživatel.id ":" kibana "
, "směrování": "1"
Příkaz cURL je:
curl -XPUT "http: // localhost: 9200 / source_index" -H 'Content-Type: application / json' -d '"nastavení": "number_of_replicas": 0, "number_of_shards": 1, "mapování" : "_source": "enabled": true, "aliasy": "alias_1": , "alias_2": "filter": "term": "uživatel.id ":" kibana "," routing ":" 1 " 'Nyní pro cílový index (můžete použít výše uvedený příkaz a změnit několik věcí nebo použít níže uvedený):
PUT / destination_index"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "aliasy":
"alias_3": ,
"alias_4":
"filter": "term":
"uživatel.id ":" kibana "
, "směrování": "1"
Uživatelé cURL mohou jako vždy použít příkaz:
curl -XPUT "http: // localhost: 9200 / destination_index" -H 'Content-Type: application / json' -d '"nastavení": "number_of_replicas": 0, "number_of_shards": 1, "mapování" : "_source": "enabled": true, "aliasy": "alias_3": , "alias_4": "filter": "term": "uživatel.id ":" kibana "," routing ":" 1 " 'Nyní máme indexy, které chceme použít, a pak můžeme přejít k opětovné indexaci dokumentů.
Zvažte níže uvedený požadavek, který kopíruje data ze source_index do destination_index:
POST _reindex„Source“:
"index": "source_index"
,
"dest":
"index": "destination_index"
Příkaz cURL je následující:
curl -XPOST "http: // localhost: 9200 / _reindex" -H 'Content-Type: application / json' -d '"source": "index": ".kibana "," dest ": " index ":" destination_index " 'Provedení tohoto příkazu by vám mělo poskytnout podrobné informace o provedené operaci.
POZNÁMKA: Zdrojový_index by měl mít data.
"vzal": 2836,
"timed_out": false,
"celkem": 13059,
"aktualizováno": 0,
"vytvořeno": 13059,
"odstraněno": 0,
"batches": 14,
"version_conflicts": 0,
"noops": 0,
"retries":
"bulk": 0,
"search": 0
,
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"selhání": []
Kontrola stavu opětovné indexace
Stav operací Reindexování můžete zobrazit jednoduše pomocí _tasks. Zvažte například níže uvedený požadavek:
ZÍSKAT / _ úkoly?podrobně = true & akce = * reindex & group_by = rodičePříkaz cURL je:
curl -XGET "http: // localhost: 9200 / _tasks?podrobně = true & akce = * reindex & group_by = rodiče "To by vám mělo poskytnout podrobné informace o procesu opětovné indexace, jak je uvedeno níže:
"tasks":
"FTd_2iXjSXudN_Ua4tZhHg: 51847":
"node": "FTd_2iXjSXudN_Ua4tZhHg",
"id": 51847,
"type": "transport",
"action": "indexy: data / write / reindex",
"status":
"celkem": 13059,
"aktualizováno": 9000,
"created": 0,
"odstraněno": 0,
"batches": 10,
"version_conflicts": 0,
"noops": 0,
"retries":
"bulk": 0,
"search": 0
,
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0
,
"description": "reindex z [source_index] na [destination_index] [_ doc]",
"start_time_in_millis": 1611247308063,
"running_time_in_nanos": 2094157836,
"cancellable": true,
"headers":
Závěr
Pokryli jsme vše, co potřebujete vědět o používání rozhraní Elasticsearch Reindexing API ke kopírování dokumentů z jednoho indexu (zdroj) do druhého (cíl). Přestože rozhraní Reindexing API obsahuje více, měla by vám tato příručka pomoci začít.