La Guida Definitiva alla Gestione degli Indici Elasticsearch tramite Comandi API

Padroneggia la gestione degli indici Elasticsearch con questa guida definitiva ai comandi API. Impara a creare meticolosamente indici con mappature e impostazioni personalizzate usando `PUT`, a visualizzare in modo esaustivo le loro configurazioni e dettagli con `GET` e a eliminare in sicurezza gli indici non necessari usando `DELETE`. Questo articolo fornisce esempi pratici, migliori pratiche e avvertimenti cruciali, permettendoti di controllare efficacemente il ciclo di vita dei tuoi dati all'interno di Elasticsearch per prestazioni e gestione delle risorse ottimali.

37 visualizzazioni

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, impostiamo number_of_shards (numero di shard) e number_of_replicas (numero di repliche).
  • mappings: Contiene la definizione dello schema. Definiamo le properties per ogni campo:
    • product_id: Tipo keyword per la corrispondenza esatta.
    • name: Tipo text per la ricerca full-text, con un campo secondario keyword aggiuntivo (name.raw) per l'ordinamento esatto o le aggregazioni.
    • description: Tipo text per la ricerca full-text.
    • price: Tipo float per le operazioni numeriche.
    • stock: Tipo integer per le operazioni numeriche.
    • created_at: Tipo date con formati specificati per garantire un parsing corretto.
    • available: Tipo boolean per 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 /_all o GET /*, 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 con logstash-2023-.

  • Eliminazione di tutti gli indici (estrema cautela!):
    bash DELETE /_all # oppure DELETE /*

    Pericolo! L'eliminazione di _all o * 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 GET per 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 con DELETE.
  • Permessi: Assicurarsi che l'utente o il ruolo che esegue il comando DELETE disponga delle autorizzazioni necessarie. In un ambiente di produzione, limitare le autorizzazioni DELETE solo 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.