La Guida Definitiva alla Gestione degli Indici Elasticsearch Tramite Comandi API
Elasticsearch è un potente motore di ricerca e analisi distribuito che organizza i dati in indici. Un indice è essenzialmente uno spazio dei nomi logico che punta a uno o più shard fisici, dove sono archiviati i documenti. Gestire efficacemente questi indici è fondamentale per mantenere un cluster Elasticsearch sano, performante e scalabile. Questa guida illustrerà i comandi API essenziali per la gestione del ciclo di vita degli indici, consentendo di creare, ispezionare ed eliminare indici con sicurezza.
Una gestione efficiente degli indici è fondamentale per diverse ragioni: consente di definire come i dati vengono archiviati e ricercati, ottimizzare le prestazioni configurando impostazioni come shard e repliche, e gestire lo spazio di archiviazione rimuovendo dati obsoleti o non necessari. Padroneggiare questi comandi è un'abilità cardine per qualsiasi amministratore o sviluppatore Elasticsearch, garantendo che l'infrastruttura dati rimanga robusta e agile.
Comprendere gli Indici Elasticsearch
Prima di immergersi nei comandi API, è importante capire cos'è un indice Elasticsearch. In termini semplici, un indice è come un database in un sistema di database relazionale. È una raccolta di documenti che presentano caratteristiche simili e spesso uno scopo comune. Ogni documento all'interno di un indice ha un tipo (sebbene nelle versioni più recenti di Elasticsearch, un singolo indice tipicamente rappresenti un singolo tipo, spesso _doc) e un ID univoco. Gli indici sono composti da uno o più shard, che sono indici Lucene autonomi di basso livello. Questi shard possono essere distribuiti su più nodi, garantendo scalabilità e tolleranza ai guasti.
Le componenti chiave di un indice includono:
* Mappings (Mappature): Definiscono lo schema per i documenti all'interno di un indice, specificando nomi di campo, tipi di dati (ad esempio, text, keyword, date, integer) e come devono essere indicizzati.
* Settings (Impostazioni): Configura vari aspetti operativi come il numero di shard primari, gli shard di replica, gli intervalli di aggiornamento e le impostazioni di analisi.
* Aliases (Alias): Nomi virtuali che possono puntare a uno o più indici, fornendo flessibilità alle applicazioni per interagire con gli indici senza conoscerne i nomi effettivi.
Creazione di Indici Elasticsearch
Creare un indice è il primo passo per archiviare dati in Elasticsearch. È possibile creare un indice con impostazioni predefinite o, più comunemente, definire mappature e impostazioni personalizzate adattate ai propri dati e requisiti di ricerca. Il metodo PUT viene utilizzato a questo scopo.
Creazione Base dell'Indice
Per creare un indice con impostazioni predefinite, è sufficiente inviare una richiesta PUT al nome dell'indice desiderato.
PUT /my_first_index
Dopo la creazione riuscita, Elasticsearch restituisce una conferma:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "my_first_index"
}
Questo crea un indice con uno shard primario e uno shard di replica per impostazione predefinita, e la mappatura dinamica è abilitata (il che significa che Elasticsearch inferirà i tipi di campo man mano che i documenti vengono indicizzati).
Creazione di Indici con Mappature e Impostazioni Personalizzate
Per un maggiore controllo, è possibile definire mappature esplicite per i campi e specificare impostazioni dell'indice come il numero di shard e repliche. Ciò è cruciale per ottimizzare le prestazioni di ricerca e garantire l'integrità dei dati.
Esempio: Mappature e Impostazioni Personalizzate
Creiamo un indice denominato products con tipi di campo specifici per i dati di prodotto e configuriamolo con 3 shard primari e 2 shard di replica.
PUT /products
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"product_id": {
"type": "keyword"
},
"name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"description": {
"type": "text"
},
"price": {
"type": "float"
},
"stock": {
"type": "integer"
},
"created_at": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
},
"available": {
"type": "boolean"
}
}
}
}
settings: Definisce le configurazioni a livello di cluster per l'indice. Qui, impostiamonumber_of_shards(numero di shard) enumber_of_replicas(numero di repliche).mappings: Contiene la definizione dello schema. Definiamo lepropertiesper ogni campo:product_id: Tipokeywordper la corrispondenza esatta.name: Tipotextper la ricerca full-text, con un campo secondariokeywordaggiuntivo (name.raw) per l'ordinamento esatto o le aggregazioni.description: Tipotextper la ricerca full-text.price: Tipofloatper le operazioni numeriche.stock: Tipointegerper le operazioni numeriche.created_at: Tipodatecon formati specificati per garantire un parsing corretto.available: Tipobooleanper valori vero/falso.
Suggerimento: Pianifica attentamente le tue mappature. Una volta che un indice è creato e popolato, modificare il tipo di dati di un campo esistente non è direttamente possibile senza eseguire nuovamente l'indicizzazione dei dati. Pianifica in anticipo per i tipi di dati e le esigenze analitiche.
Visualizzazione dei Dettagli e delle Impostazioni dell'Indice
Dopo aver creato un indice, spesso sarà necessario ispezionarne la configurazione per confermare le impostazioni, verificare le mappature o risolvere i problemi. Il comando GET è lo strumento principale per recuperare informazioni complete su un indice.
Recupero di Tutte le Informazioni dell'Indice
Per ottenere tutte le impostazioni, le mappature, gli alias e altri metadati per un indice specifico, utilizzare il comando GET con il nome dell'indice.
GET /products
Questo restituirà un ampio oggetto JSON contenente informazioni dettagliate, tra cui:
{
"products": {
"aliases": {},
"mappings": {
"properties": {
"available": {
"type": "boolean"
},
"created_at": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
},
"description": {
"type": "text"
},
"name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"price": {
"type": "float"
},
"product_id": {
"type": "keyword"
},
"stock": {
"type": "integer"
}
}
},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "3",
"provided_name": "products",
"creation_date": "1701234567890",
"number_of_replicas": "2",
"uuid": "some_uuid",
"version": {
"created": "7170099"
}
}
}
}
}
Recupero di Informazioni Specifiche sull'Indice
È possibile recuperare solo parti specifiche della configurazione di un indice aggiungendole all'URL.
-
Ottieni solo le mappature:
bash GET /products/_mapping -
Ottieni solo le impostazioni:
bash GET /products/_settings -
Ottieni solo gli alias:
bash GET /products/_alias
Questo recupero mirato è utile quando si è interessati solo a un particolare aspetto di un indice, rendendo l'output più gestibile.
Visualizzazione di Indici Multipli
È anche possibile recuperare informazioni per più indici separandone i nomi con virgole o utilizzando caratteri jolly (wildcard).
-
Indici multipli specifici:
bash GET /products,my_first_index/_settings -
Tutti gli indici che iniziano con 'p':
bash GET /p*/_mapping -
Tutti gli indici (usare con cautela in produzione):
bash GET /_all # oppure GET /*
Nota: Quando si utilizza
GET /_alloGET /*, prepararsi a una risposta potenzialmente molto grande se il cluster ha molti indici. Usarlo con giudizio, specialmente negli ambienti di produzione.
Eliminazione degli Indici Elasticsearch
L'eliminazione di un indice è un'operazione permanente che rimuove tutti i documenti e i metadati ad esso associati. Questo viene generalmente fatto per liberare spazio su disco, rimuovere dati vecchi o pulire indici di test. Il metodo DELETE viene utilizzato per questa operazione critica.
Eliminazione di un Singolo Indice
Per eliminare un singolo indice, utilizzare il comando DELETE seguito dal nome dell'indice.
DELETE /my_first_index
Un'eliminazione riuscita restituirà:
{
"acknowledged": true
}
Attenzione: Questa azione è irreversibile. Una volta eliminato un indice, i suoi dati sono persi per sempre a meno che non si disponga di uno snapshot o di un backup. Verificare sempre il nome dell'indice prima di eseguire un comando
DELETE, specialmente negli ambienti di produzione.
Eliminazione di Indici Multipli
Similmente a GET, è possibile eliminare più indici specificandoli in un elenco separato da virgole o utilizzando caratteri jolly.
-
Eliminazione di più indici specifici:
bash DELETE /my_old_index_1,my_old_index_2 -
Eliminazione di tutti gli indici che corrispondono a un modello:
bash DELETE /logstash-2023-*
Questo comando eliminerebbe tutti gli indici il cui nome inizia conlogstash-2023-. -
Eliminazione di tutti gli indici (estrema cautela!):
bash DELETE /_all # oppure DELETE /*Pericolo! L'eliminazione di
_allo*rimuoverà ogni singolo indice dal cluster. Questa è un'operazione estremamente distruttiva e non dovrebbe mai essere eseguita in un ambiente di produzione a meno che non si intenda esplicitamente cancellare l'intero cluster e si disponga di un piano di ripristino solido. Molti cluster di produzione disabilitano questa funzionalità per prevenire la perdita accidentale di dati.
Best Practice per l'Eliminazione
- Verificare sempre: Prima di eliminare, utilizzare
GETper ispezionare l'indice (o gli indici tramite wildcard) che si intende eliminare. Ciò conferma che si stanno indirizzando i dati corretti.
bash GET /logstash-2023-*
Rivedere l'output e, se corrisponde alle aspettative, procedere conDELETE. - Permessi: Assicurarsi che l'utente o il ruolo che esegue il comando
DELETEdisponga delle autorizzazioni necessarie. In un ambiente di produzione, limitare le autorizzazioniDELETEsolo al personale autorizzato. - Snapshot: Effettuare sempre uno snapshot del cluster prima di eseguire eliminazioni su larga scala, specialmente se i dati sono critici.
Confronto e Gestione del Ciclo di Vita
Questi tre comandi (PUT per la creazione, GET per l'ispezione, DELETE per la rimozione) costituiscono la spina dorsale della gestione manuale del ciclo di vita degli indici. Sono utilizzati in diverse fasi:
- Creazione (
PUT): All'inizio della vita di un indice, definendone la struttura e la configurazione iniziale. - Ispezione (
GET): Durante tutta la vita attiva di un indice, per monitoraggio, risoluzione dei problemi e verifica. - Eliminazione (
DELETE): Alla fine della vita utile di un indice, per recuperare risorse e gestire le politiche di conservazione dei dati.
Sebbene questi comandi siano eccellenti per la gestione ad hoc o programmatica, Elasticsearch fornisce anche potenti funzionalità per la gestione automatizzata del ciclo di vita degli indici (ILM). Le policy ILM consentono di definire regole per far transitare automaticamente gli indici attraverso fasi (hot, warm, cold, delete) in base all'età, alla dimensione o ad altri criteri, incluse operazioni come lo shrinking, il force merge e, infine, l'eliminazione. Per la conservazione dei dati su larga scala o a lungo termine, ILM è l'approccio consigliato per automatizzare la fase di DELETE.
Conclusione
La gestione degli indici Elasticsearch tramite comandi API è un'abilità indispensabile per chiunque lavori con la piattaforma. Hai imparato come creare indici con mappature e impostazioni precise utilizzando PUT, ispezionarne accuratamente le configurazioni con GET ed eliminarli in sicurezza utilizzando DELETE. Comprendendo e applicando correttamente questi comandi, si ottiene un controllo granulare sull'archiviazione dei dati e si può garantire che il cluster Elasticsearch rimanga efficiente, ben organizzato e performante.
Ricorda sempre l'importanza di un'attenta pianificazione delle mappature, una verifica diligente prima dell'eliminazione e l'utilizzo delle funzionalità integrate di Elasticsearch come ILM per una gestione del ciclo di vita avanzata e automatizzata. Con questi strumenti e le migliori pratiche, sei ben equipaggiato per padroneggiare l'amministrazione degli indici Elasticsearch. Per ulteriori esplorazioni, approfondisci le opzioni di mappatura avanzate, i modelli di indice (index templates) e tutta la potenza delle policy di Gestione del Ciclo di Vita degli Indici di Elasticsearch.