Quando modifichi i dati in un indice Elasticsearch, può portare a tempi di inattività poiché la funzionalità viene completata e i dati vengono reindicizzati.
Questo tutorial ti darà un modo molto migliore di aggiornare gli indici senza subire tempi di inattività con l'origine dati esistente. Utilizzando l'API di re-indicizzazione Elasticsearch, copieremo i dati da una fonte specifica a un'altra.
Cominciamo.
NOTA: Prima di iniziare, le operazioni di reindicizzazione richiedono molte risorse, specialmente su indici di grandi dimensioni. Per ridurre al minimo il tempo necessario per la reindicizzazione, disabilitare number_of_replicas impostando il valore su 0 e abilitarli una volta completato il processo.
Abilita _Campo sorgente
L'operazione di reindicizzazione richiede che il campo sorgente sia abilitato su tutti i documenti nell'indice sorgente. Nota che il campo sorgente non è indicizzato e non può essere cercato ma è utile per varie richieste.
Abilita il campo _Source aggiungendo una voce come mostrato di seguito:
PUT indice_1“mappature”:
"_fonte":
"abilitato": vero
Reindicizza tutti i documenti
Per reindicizzare i documenti, è necessario specificare l'origine e la destinazione. L'origine e la destinazione possono essere un indice esistente, un alias di indice e flussi di dati. Puoi usare gli indici dal cluster locale o remoto.
NOTA: Affinché l'indicizzazione avvenga correttamente, sia l'origine che la destinazione non possono essere simili. È inoltre necessario configurare la destinazione come richiesto prima della reindicizzazione perché non applica le impostazioni dall'origine o da qualsiasi modello associato.
La sintassi generale per la reindicizzazione è la seguente:
POST /_reindexIniziamo creando due indici. Il primo sarà la fonte e l'altro sarà la destinazione.
PUT /source_index"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true,"alias":
"alias_1": ,
"alias_2":
"filtro": "termine":
"utente.id": "kibana"
,"instradamento": "1"
Il comando cURL è:
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,"alias": "alias_1": , "alias_2": "filter": "term": "user.id": "kibana" ,"routing": "1" 'Ora per l'indice di destinazione (puoi usare il comando sopra e cambiare alcune cose o usare quello indicato di seguito):
PUT /indice_destinazione"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mapping": "_source": "enabled": true,"alias":
"alias_3": ,
"alias_4":
"filtro": "termine":
"utente.id": "kibana"
,"instradamento": "1"
Come sempre, gli utenti di cURL possono utilizzare il comando:
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,"alias": "alias_3": , "alias_4": "filter": "term": "user.id": "kibana" ,"routing": "1" 'Ora abbiamo gli indici che vogliamo usare, possiamo quindi passare alla reindicizzazione dei documenti.
Considera la richiesta di seguito che copia i dati da source_index a destination_index:
POST _reindicizzare"fonte":
"indice": "indice_origine"
,
"dest":
"indice": "indice_destinazione"
Il comando cURL per questo è:
curl -XPOST "http://localhost:9200/_reindex" -H 'Content-Type: application/json' -d' "source": "index": ".kibana" , "dest": "index": "destination_index" 'L'esecuzione di questo comando dovrebbe fornire informazioni dettagliate sull'operazione eseguita.
NOTA: Source_index dovrebbe contenere dati.
"preso": 2836,
"timed_out": false,
"totale" : 13059,
"aggiornato": 0,
"creato": 13059,
"cancellato": 0,
"lotti": 14,
"version_conflicts": 0,
"noops": 0,
"riprova":
"alla rinfusa": 0,
"cerca": 0
,
"throttled_millis": 0,
"richieste_al_secondo": -1.0,
"throttled_until_millis": 0,
"fallimenti" : [ ]
Verifica dello stato di reindicizzazione
Puoi visualizzare lo stato delle operazioni di reindicizzazione semplicemente utilizzando _tasks. Si consideri ad esempio la richiesta di seguito:
GET /_compitita?dettagliato=vero&azioni=*reindicizza&gruppo_da=genitoriIl comando cURL è:
curl -XGET "http://localhost:9200/_tasks?detail=true&actions=*reindicizza&group_by=genitori"Questo dovrebbe darti informazioni dettagliate sul processo di reindicizzazione come mostrato di seguito:
"compiti" :
"FTd_2iXjSXudN_Ua4tZhHg:51847":
"nodo": "FTd_2iXjSXudN_Ua4tZhHg",
"id": 51847,
"tipo": "trasporto",
"azione": "indici:dati/scrittura/reindicizza",
"stato":
"totale" : 13059,
"aggiornato": 9000,
"creato": 0,
"cancellato": 0,
"lotti": 10,
"version_conflicts": 0,
"noops": 0,
"riprova":
"alla rinfusa": 0,
"cerca": 0
,
"throttled_millis": 0,
"richieste_al_secondo": -1.0,
"throttled_until_millis": 0
,
"descrizione": "reindicizza da [indice_origine] a [indice_destinazione][_doc]",
"start_time_in_millis": 1611247308063,
"running_time_in_nanos": 2094157836,
"cancellabile": vero,
"intestazioni":
Conclusione
Abbiamo coperto tutto ciò che devi sapere sull'utilizzo dell'API Elasticsearch Reindexing per copiare documenti da un indice (origine) a un altro (destinazione). Sebbene ci sia altro nell'API di reindicizzazione, questa guida dovrebbe aiutarti a iniziare.