ElasticSearch Rinomina indice

ElasticSearch Rinomina indice

Un indice o indici di ElasticSearch è (sono) una struttura di dati che contiene mappature per vari documenti. In un database relazionale, un indice potrebbe fare riferimento a un database specifico.

Un cluster di ElasticSearch contiene diversi indici, inclusi più tipi, che detengono i documenti.

Quanto segue potrebbe rappresentare la relazione Elasticsearch con un database relazionale.

  • PostgreSQL -> Database -> Tabella -> Row/Column
  • ElaSticSearch -> indice -> type -> documento

In questa guida, discuteremo di vari metodi per rinominare un indice ElaSticSearch esistente.

Metodo 1: ReindExing

Il primo metodo che possiamo usare durante la ridenominazione di un indice è l'API di ReindExing. Questa API consente di copiare i documenti da un indice di origine a un indice di destinazione specificato.

Tuttavia, l'API Reindex non copia la configurazione dell'indice di origine nella destinazione. Quindi, dobbiamo impostare l'indice di destinazione e applicare la configurazione dell'indice di origine prima di chiamare ReinDex.

Possiamo implementare un'operazione di reindex completa seguendo i passaggi come indicato di seguito:

  1. Crea un nuovo indice (fonte) Elasticsearch
  2. Prendi la configurazione dell'indice e salvala.
  3. Crea un nuovo indice (destinazione) con la configurazione dell'indice di origine.
  4. Chiama l'API ReinDex dall'origine alla destinazione
  5. Elimina l'indice di origine.

Se hai un indice ElasticSearch esistente, sentiti libero di saltare al passaggio 2

NOTA: In questa guida, forniremo tutte le richieste di elasticsearch per Curl.

Passaggio 1: creare un nuovo indice
Creiamo un indice che fungerà da fonte. Per semplicità, useremo una semplice configurazione dell'indice con la maggior parte dei parametri predefiniti.

Offeremo una richiesta all'endpoint HTTP di Elasticsearch.

Di seguito è riportata una richiesta di esempio per creare un indice "indice di prova":

Curl -xput "http: // localhost: 9200/test -indEx" -H 'Content -Type: Application/Json' -D '

"impostazioni":
"indice":
"numero_of_shards": 3,
"Number_of_replicas": 2

,
"Mappings":
"proprietà":
"field1": "type": "text"


'

Il prossimo passo è aggiungere dati all'indice creato. Per impostazione predefinita, l'indice non contiene alcun documento.

Curl -xget http: // localhost: 9200/_cat/indici/test -indice \?v

Per aggiungere dati all'indice, eseguire la richiesta come:

La richiesta sopra dovrebbe creare un documento nell'indice di test-indice.

Possiamo verificare che il documento esista utilizzando la richiesta get all'endpoint indice.

Curl -xget "http: // locahost: 9200/test -indEx/_search" -H 'Content -Type: Application/Json' -D '

"query": "match_all":
'
'

Un output di esempio è mostrato ANS:

Passaggio 2: recupero della configurazione di origine
Il passaggio successivo prima di eseguire un'operazione ReinDex consiste nel copiare la configurazione dell'indice di origine.

Inizieremo ottenendo l'impostazione dell'indice. Per fare ciò, inviamo una richiesta HTTP Get all'API _setting.

Impostas = $ (Curl -Xget "https: // localhost: 9200/test -indEx/_settings")

Salviamo l'output su una variabile che possiamo verificare usando il comando:

Echo $ Impostazioni | JQ

Poiché l'output è in formato JSON, lo passiamo a un processore JSON come JQ. Un output di esempio è come mostrato:

Il prossimo passo è ottenere la mappatura dell'indice. In questo caso, invieremo una richiesta GET all'endpoint _mapping come:

mapping = $ (curl -xget "https: // localhost: 9200/test -index/_mapping")

Verificare che l'output sia salvato nella variabile:

Echo $ mapping | JQ

L'output è come mostrato:

Successivamente, combina l'output di $ sia di $ che a $ mapping a un singolo formato JSON.

Quello che segue è uno screenshot troncato di entrambe le uscite combinate (config.JSON).

Passaggio 3: crea un nuovo indice
Ora è il momento di creare un nuovo indice con la configurazione di salvataggio. Assicurarsi che la configurazione non contenga errori.

Esegui il comando come:

Curl -xput "http: // localhost: 9200/rinominato -indEx" -H 'Content -Type: Application/JSON' -D Config.json '

Di seguito è riportato il contenuto nella configurazione, il file JSON utilizzato in questo tutorial.

Dopo una creazione di successo, dovresti vedere riconosciuto: Vero come mostrato:

Passaggio 4: reindEx
Ora che abbiamo un indice rinominato simile all'indice di origine, possiamo copiare i dati dall'origine a destinazione utilizzando l'API Reindex.

Curl -xpost "http: // localhost: 9200/_reindex" -H 'Content -Type: Application/Json' -D '

"fonte":
"INDICE": "Test-Index"
,
"dest":
"INDICE": "Rinominato-Index"

'

Una volta effettuata la richiesta ReinDEx, ElasticSearch copierà i dati dall'indice di origine specificato all'indice di destinazione.

Ecco un esempio di esempio:

Passaggio 5: Elimina l'indice di origine
Non ha senso avere due indici con configurazione e dati simili. Quindi, possiamo abbandonare l'indice di origine:

Curl -xdelete http: // localhost: 9200/test -indice

"riconosciuto": vero

Metodo 2: clone API

Il secondo e il modo più semplice per rinominare e indice è utilizzare l'API clone introdotta nella versione 7 di Elasticsearch.4 e sopra.

Per utilizzare l'API clone, è necessario assicurarsi che l'indice di origine sia di sola lettura e la salute del cluster è verde.

Come funziona la clonazione
La clonazione funziona come segue:

  • Crea un nuovo indice di ElasticSearch. Il nuovo indice dovrebbe contenere definizioni identiche come vecchio indice (indice di origine).
  • Il prossimo passo è eseguire un segmento di collegamento duro dell'indice di origine nel nuovo indice Elasticsearch.
  • Una volta eseguito il collegamento duro, il nuovo indice viene riaperto con le definizioni e i dati del vecchio indice.

Passaggio 1: imposta l'indice di origine su sola lettura
Per impostare l'indice di origine sulla modalità di sola lettura, utilizziamo l'API _settings e passiamo le informazioni come mostrato nella richiesta seguente:

Curl -xput "http: // localhost: 9200/test -indEx/_settings" -H 'Content -Type: Application/Json' -D '

"impostazioni":
"indice.blocchi.Scrivi ": vero

'

Passaggio 2: indice di origine clone al target
Per clonare l'indice di prova su un nuovo indice chiamato Rinominad-cloned-Index, possiamo eseguire la richiesta come mostrato:

Curl -Xpost “http: // localhost: 9200/test-indice/_clone/rinominato-indice"

Supponendo che i seguenti requisiti siano veri, dovresti avere un indice rinominato dell'indice di origine.

  1. L'indice target specificato non deve esistere.
  2. Il nodo ha spazio sufficiente per archiviare l'indice clonato
  3. L'indice di origine ha un numero uguale di frammenti primari come indice di destinazione specificato.

Conclusione

In questa guida, abbiamo trattato come rinominare un indice di Elasticsearch usando due metodi.

Grazie per aver letto!