ElasticSearch ReindEx Change Field Tipo

ElasticSearch ReindEx Change Field Tipo

Lavorare con i database è molto divertente ma a volte può essere impegnativo, soprattutto quando si tratta di dati già esistenti.

Ad esempio, se si desidera modificare il tipo di campo specifico, potrebbe richiedere di abbattere il servizio, che può avere repercussioni gravi, specialmente nei servizi che elaborano grandi quantità di dati.

Fortunatamente, possiamo usare le potenti funzionalità di Elasticsearch come reindesting, inger nodi, condutture e processori per rendere tali compiti molto facili.

Questo tutorial ti mostrerà come modificare un tipo di campo in un indice specifico in un altro, utilizzando i nodi di ingresso di ElasticSearch. L'uso di questo approccio eliminerà i tempi di inattività che influiscono sui servizi pur continuando a eseguire le attività di modifica del tipo di campo.

Introduzione ai nodi ingeri

Il nodo Ingest di Elasticsearch ti consente di pre-processare i documenti prima della loro indicizzazione.

Un nodo Elasticsearch è un'istanza specifica di Elasticsearch; I nodi collegati (più di uno) creano un singolo cluster.

È possibile visualizzare i nodi disponibili nel cluster in esecuzione con la richiesta:

Get /_nodes /

Il comando Curl per questo è:

Curl -Xget “http: // localhost: 9200/_nodes/”

L'esecuzione di questo comando dovrebbe fornire enormi informazioni sui nodi, come mostrato di seguito (output troncato):


"_nodes":
"Totale": 3,
"successo": 3,
"fallito": 0
,
"cluster_name": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"nodi":
"GSLMJTKYTEMOOX-EO7EM4W":
"Nome": "Istance-0000000003",
"Transport_address": "172.28.86.133: 19925 ",
"host": "172.28.86.133 ",
"IP": "172.28.86.133 ",
"Versione": "7.10.2 ",
"build_flavor": "predefinito",
"build_type": "Docker",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"Total_indexing_buffer": 214748364,
"Ruoli": [
"dati",
"Data_Cold",
"data_content",
"data_hot",
"data_warm",
"ingerire",
"maestro",
"Remote_Cluster_Client",
"trasformare"
",
"Attributi":
"logical_availability_zone": "Zone-0",
"server_name": "Instance-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"Disponibilità_zone": "US-WEST-1C",
"Xpack.installato ":" vero ",
"Instance_Configuration": "AWS.dati.Highoo.i3 ",
"trasformare.nodo ":" vero ",
"Regione": "US-WEST-1"
,
"impostazioni" :
"S3":
"cliente" :
"Elastic-internal-22e0be":
"Endpoint": "S3-US-WEST-1.Amazonaws.com "


,
--------------------------------output troncato---------------------

Per impostazione predefinita, tutti i nodi Elasticsearch consentono di ingerire e sono in grado di gestire le operazioni di ingertazione. Tuttavia, per le operazioni di ingerve pesanti, è possibile creare un singolo nodo dedicato solo all'ingestione.

Per gestire il pre_process, prima di indicizzare i documenti, dobbiamo definire una pipeline che afferma la serie di preprocessori.

I preprocessori sono set di istruzioni avvolte attorno a una conduttura e vengono eseguite una alla volta.

Di seguito è la sintassi generale di come definire una pipeline:


"Descrizione": "Convertimi",
"processori": [
"Convert":
"campo": "id",
"tipo": "intero"
]

La proprietà Descrizione dice ciò che la pipeline dovrebbe raggiungere. Il parametro successivo sono i preprocessori, trasmessi come elenco nell'ordine della loro esecuzione.

Crea una pipeline di converti

Per creare una pipeline che useremo per convertire un tipo, utilizzare la richiesta put con l'endpoint API _ingest come:

Put _ingest/pipeline/convert_pipeline

"Descrizione": "Converte il campo di campo da giorno a un lungo periodo",
"Processori": [

"Convert":
"Field": "Dayofweek",
"Tipo": "Long"


"

Per Curl, usa il comando:

Curl -xput "http: // localhost: 9200/_ingest/pipeline/convert_pipeline" -H 'Content -type: Application/Json' -d '"Descrizione": "Converte il campo di DayofWeek a un lungo numero di interi", " processori ": [" convert ": " campo ":" DayofWeek "," type ":" long "] '

ReindEx e converti Tipo

Una volta che abbiamo la pipeline nel nodo Ingest, tutto ciò che dobbiamo fare è chiamare l'API di indicizzazione e passare la pipeline come argomento nel destino dell'organismo di richiesta come:

Post _Reindex

"fonte":
"INDICE": "kibana_sample_data_flights"
,
"dest":
"INDICE": "kibana_sample_type_diff",
"Pipeline": "Convert_Pipeline"

Per Curl:

Curl -xpost "http: // localhost: 9200/_reindex" -h 'content -type: applicazione/json' -d '"sorgente": "indice": "kibana_sample_data_flights", "dest": "indice indice" ":" kibana_sample_type_diff "," pipeline ":" convert_pipeline " '

Verifica la conversione

Per verificare che la pipeline si sia applicata correttamente, utilizzare la richiesta GET per recuperare quel campo specifico come:

Get/kibana_sample_data_flights/_mapping/field/dayofweek
Get/kibana_sample_type_diff/_mapping/field/dayofweek

Questo dovrebbe restituire i dati come:

-----------------------Indice originale---------------------------

"kibana_sample_data_flights":
"Mappings":
"giorno della settimana" :
"Full_name": "Dayofweek",
"Mappatura" :
"giorno della settimana" :
"tipo": "intero"






-------------------------Dati reindicizzati-------------------------------

"kibana_sample_type_diff":
"Mappings":
"giorno della settimana" :
"Full_name": "Dayofweek",
"Mappatura" :
"giorno della settimana" :
"Tipo": "Long"





Conclusione

In questa guida, abbiamo esaminato come lavorare con i nodi di Ingest di Elasticsearch ai documenti pre-process prima dell'indicizzazione, convertendo così un campo da un tipo a un altro.

Considera la documentazione per saperne di più.

https: // www.elastico.CO/GUIDA/EN/ELASTICEARCH/RIFERIMENTO/MASTER/INGERST.html