Ricerca elastica

Elasticsearch Reindex Modifica il tipo di campo

Elasticsearch Reindex Modifica il tipo di campo

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

Ad esempio, se si desidera modificare il tipo di un campo specifico, potrebbe essere necessario disattivare il servizio, il che può avere gravi ripercussioni, soprattutto nei servizi che elaborano grandi quantità di dati.

Fortunatamente, possiamo utilizzare le potenti funzionalità di Elasticsearch come Reindexing, ingest nodi, pipeline e processori per rendere tali attività molto semplici.

Questo tutorial ti mostrerà come cambiare un tipo di campo in un indice specifico in un altro, utilizzando i nodi Elasticsearch Ingest. L'utilizzo di questo approccio eliminerà i tempi di inattività che influiscono sui servizi pur riuscendo a eseguire le attività di modifica del tipo di campo.

Introduzione ai nodi di acquisizione

Il nodo ingest di Elasticsearch consente di pre-elaborare i documenti prima della loro indicizzazione.

Un nodo Elasticsearch è un'istanza specifica di Elasticsearch; i nodi connessi (più di uno) formano un unico cluster.

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

GET /_nodi/

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):


"_nodi":
"totale": 3,
"successo": 3,
"fallito": 0
,
"nome_cluster": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"nodi":
"gSlMjTKyTemoOX-EO7Em4w":
"nome": "istanza-00000000003",
"transport_address": "172.28.86.133:19925",
"ospite": "172.28.86.133",
"ip": "172.28.86.133",
"versione": "7.10.2",
"build_flavor": "predefinito",
"build_type": "finestra mobile",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"total_indexing_buffer": 214748364,
"ruoli": [
"dati",
"data_cold",
"data_content",
"data_hot",
"data_warm",
"ingerire",
"maestro",
"client_cluster_remoto",
"trasformare"
],
"attributi":
"logical_availability_zone": "zona-0",
"nome_server": "istanza-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a",
"availability_zone": "us-west-1c",
"xpack".installato" : "vero",
"instance_configuration": "aws.dati.alto.i3",
"trasformare.nodo" : "vero",
"regione": "us-west-1"
,
"impostazioni" :
"s3":
"cliente" :
"elastic-internal-22e0be":
"endpoint": "s3-us-west-1.amazonaws.com"


,
--------------------------------uscita troncata---------------------

Per impostazione predefinita, tutti i nodi Elasticsearch abilitano l'acquisizione e sono in grado di gestire le operazioni di acquisizione. Tuttavia, per operazioni di acquisizione pesanti, è possibile creare un singolo nodo dedicato solo all'acquisizione.

Per gestire pre_process, prima di indicizzare i documenti, è necessario definire una pipeline che indichi la serie dei preprocessori.

I preprocessori sono insiemi di istruzioni avvolte attorno a una pipeline e vengono eseguite una alla volta.

La seguente è la sintassi generale di come definire una pipeline:


"descrizione": "Convertimi",
"processori": [
"convertire":
"campo": "id",
"tipo": "intero"
]

La proprietà description dice cosa dovrebbe raggiungere la pipeline. Il parametro successivo sono i preprocessori, passati sotto forma di elenco nell'ordine della loro esecuzione.

Crea una pipeline di conversione

Per creare una pipeline che utilizzeremo per convertire un tipo, usa la richiesta PUT con l'endpoint API _ingest come:

PUT _ingest/pipeline/convert_pipeline

“descrizione”: “converte il campo dayOfWeek in un long da intero”,
"processori" : [

"convertire":
"campo": "dayOfWeek",
"tipo": "lungo"


]

Per cURL, usa il comando:

curl -XPUT "http://localhost:9200/_ingest/pipeline/convert_pipeline" -H 'Content-Type: application/json' -d'  "description": "converte il campo dayOfWeek in un long da intero",  " processori" : [           "convert" :          "field" : "dayOfWeek",        "type": "long"            ]'

Reindicizza e converti genere

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 dest del corpo della richiesta come:

POST _reindicizzare

"fonte":
"indice": "kibana_sample_data_flights"
,
"dest":
"indice": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"

Per ricciolo:

curl -XPOST "http://localhost:9200/_reindex" -H 'Content-Type: application/json' -d'  "source":     "index": "kibana_sample_data_flights"  ,  "dest":     "index ": "kibana_sample_type_diff",    "pipeline": "convert_pipeline"  '

 Verifica conversione

Per verificare che la pipeline sia stata applicata correttamente, usa 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":
"mapping":
"giorno della settimana" :
"full_name": "dayOfWeek",
"Mappatura" :
"giorno della settimana" :
"tipo": "intero"






-------------------------DATI REINDICATI-------------------------------

"kibana_sample_type_diff":
"mapping":
"giorno della settimana" :
"full_name": "dayOfWeek",
"Mappatura" :
"giorno della settimana" :
"tipo": "lungo"





Conclusione

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

Considera la documentazione per saperne di più.

https://www.elastico.co/guide/it/elasticsearch/reference/master/ingest.html

Come installare e giocare a Doom su Linux
Introduzione a Doom La serie Doom è nata negli anni '90 dopo l'uscita dell'originale Doom. È stato un successo immediato e da quel momento in poi la s...
Vulkan per utenti Linux
Con ogni nuova generazione di schede grafiche, vediamo gli sviluppatori di giochi spingere i limiti della fedeltà grafica e avvicinarsi di un passo al...
OpenTTD vs Simutrans
Creare la tua simulazione di trasporto può essere divertente, rilassante ed estremamente allettante. Ecco perché devi assicurarti di provare quanti pi...