När du modifierar data i ett Elasticsearch-index kan det leda till stillestånd när funktionaliteten slutförs och data indexeras om.
Denna handledning ger dig ett mycket bättre sätt att uppdatera index utan att uppleva stillestånd med den befintliga datakällan. Med hjälp av Elasticsearch-återindexerings-API: et kommer vi att kopiera data från en specifik källa till en annan.
Låt oss komma igång.
NOTERA: Innan vi kommer igång är Reindexing-resurser tunga, särskilt på stora index. För att minimera den tid som krävs för Reindexing, inaktivera number_of_replicas genom att ställa in värdet till 0 och aktivera dem när processen är klar.
Aktivera _Source Field
Återindexingen kräver att källfältet är aktiverat på alla dokument i källindexet. Observera att källfältet inte är indexerat och inte kan sökas men är användbart för olika förfrågningar.
Aktivera fältet _Source genom att lägga till en post enligt nedan:
PUT index_1“Mappings”:
"_källa":
"enabled": true
Reindexa alla dokument
För att omindexera dokument måste vi ange källa och destination. Källa och destination kan vara ett befintligt index, indexalias och dataströmmar. Du kan använda index från det lokala eller ett fjärrkluster.
NOTERA: För att indexering ska kunna ske framgångsrikt kan både källa och destination inte vara lika. Du måste också konfigurera destinationen som krävs före Reindexing eftersom den inte tillämpar inställningar från källan eller någon associerad mall.
Den allmänna syntaxen för Reindexing är som:
POST / _reindexLåt oss börja med att skapa två index. Den första är källan och den andra destinationen.
PUT / source_index"inställningar": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "aliases":
"alias_1": ,
"alias_2":
"filter": "term":
"användare.id ":" kibana "
, "routing": "1"
Kommandot cURL är:
curl -XPUT "http: // localhost: 9200 / source_index" -H 'Content-Type: application / json' -d '"settings": "number_of_replicas": 0, "number_of_shards": 1, "mappings" : "_source": "enabled": true, "aliases::" "alias_1": , "alias_2": "filter": "term": "user.id ":" kibana "," routing ":" 1 " 'Nu för destinationsindexet (du kan använda kommandot ovan och ändra några saker eller använda det som anges nedan):
PUT / destination_index"inställningar": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "aliases::
"alias_3": ,
"alias_4":
"filter": "term":
"användare.id ":" kibana "
, "routing": "1"
Som alltid kan cURL-användare använda kommandot:
curl -XPUT "http: // localhost: 9200 / destination_index" -H 'Content-Type: application / json' -d '"settings": "number_of_replicas": 0, "number_of_shards": 1, "mappings" : "_source": "enabled": true, "aliases": "alias_3": , "alias_4": "filter": "term": "user.id ":" kibana "," routing ":" 1 " 'Nu har vi de index som vi vill använda, vi kan sedan gå vidare för att indexera om dokumenten.
Tänk på begäran nedan som kopierar data från source_index till destination_index:
POST _reindex“Källa”:
"index": "source_index"
,
"dest":
"index": "destination_index"
CURL-kommandot för detta är:
curl -XPOST "http: // localhost: 9200 / _reindex" -H 'Content-Type: application / json' -d '"source": "index": ".kibana "," dest ": " index ":" destination_index " 'Genom att utföra detta kommando bör du få detaljerad information om den utförda åtgärden.
NOTERA: Source_index ska ha data.
"tog": 2836,
"timed_out": falskt,
"totalt": 13059,
"uppdaterad": 0,
"skapad": 13059,
"borttagen": 0,
"satser": 14,
"version_conflicts": 0,
"noops": 0,
"försöker igen":
"bulk": 0,
"sök": 0
,
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"misslyckanden": []
Kontrollerar omindexeringsstatus
Du kan visa statusen för Reindexing-operationerna genom att helt enkelt använda _tasks. Tänk till exempel på begäran nedan:
GET / _uppgifter?detaljerad = true & actions = * reindex & group_by = föräldrarKommandot cURL är:
curl -XGET "http: // localhost: 9200 / _tasks?detaljerad = true & actions = * reindex & group_by = föräldrar "Det borde ge dig detaljerad information om Reindexing-processen enligt nedan:
"uppgifter":
"FTd_2iXjSXudN_Ua4tZhHg: 51847":
"node": "FTd_2iXjSXudN_Ua4tZhHg",
"id": 51847,
"type": "transport",
"action": "index: data / write / reindex",
"status":
"totalt": 13059,
"uppdaterad": 9000,
"skapad": 0,
"borttagen": 0,
"satser": 10,
"version_conflicts": 0,
"noops": 0,
"försöker igen":
"bulk": 0,
"sök": 0
,
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0
,
"description": "reindex från [source_index] till [destination_index] [_ doc]",
"start_time_in_millis": 1611247308063,
"running_time_in_nanos": 2094157836,
"avbokningsbar": sant,
"rubriker":
Slutsats
Vi har täckt allt du behöver veta om att använda Elasticsearch Reindexing API för att kopiera dokument från ett index (källa) till ett annat (destination). Även om det finns mer i Reindexing API, bör den här guiden hjälpa dig att komma igång.