Utilisation avancée des modèles d'index dans Elasticsearch

Définition d'un modèle d'index

Un modèle d'index dans Elasticsearch sert à préconfigurer les paramètres (settings) et les mappings pour des index futurs. Il est particulièrement adopté aux scénarios de séries temporelles, où des index sont générés périodiquement, permettant ainsi de standardiser leur configuration sans répétition.

Composition d'un modèle

Chaque modèle inclut deux éléments clés :

  • Settings : Configuration technique comme le nombre de shards, replicas, et politiques de rafraîchissement.
  • Mappings : Structure des documents, définissant les types de champs et leurs propriétés.

Les mapings incluent souvent des paramètres tels que _source pour le stockage des données brutes, et properties pour spécifier chaque champ. Notez que le champ _all est déprécié depuis ES 6.0 ; il est remplacé par l'utilisation de copy_to pour des fonctionnalités similaires.

Création d'un modèle

Voici des exemples adaptés pour différentes versions d'Elasticsearch, avec des noms et structures modifiés pour la démonstration.

Pour les versions antérieures à ES 6.0 :

PUT _template/template_produit_legacy
{
  "template": "produit*",
  "order": 1,
  "settings": {
    "number_of_shards": 3
  },
  "mappings": {
    "_default": {
      "_source": { "enabled": false },
      "_all": { "enabled": false },
      "dynamic": "strict"
    },
    "type_principal": {
      "_source": { "enabled": false },
      "properties": {
        "date_creation": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm"
        },
        "edition": {
          "type": "string",
          "index": "not_analyzed"
        },
        "catégorie": {
          "type": "keyword"
        }
      }
    }
  }
}

Pour ES 6.0 et versions ultérieures :

PUT _template/template_produit_actuel
{
  "index_patterns": ["produit*", "item*"],
  "order": 1,
  "settings": {
    "number_of_shards": 3
  },
  "mappings": {
    "_doc": {
      "_source": { "enabled": false },
      "properties": {
        "date_creation": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm"
        },
        "edition": {
          "type": "text",
          "index": false
        },
        "catégorie": {
          "type": "keyword"
        }
      }
    }
  }
}

Gestion des modèles

Pour afficher les modèles existants, exécutez des requêtes GET avec des filtres si nécessaire. Pour vérifier la présence d'un modèle spécifique, utilisez une requête HEAD. La suppression se fait via une requête DELETE ; en cas d'absence, Elasticsearch renverra une erreur 404.

Recommandations pratiques

  • Depuis ES 6.0, chaque index ne peut contenir qu'un seul type de document, en utilisant par défaut _doc.
  • Désactivez _source si les données originales ne sont pas requises pour les recherches, ce qui réduit l'utilisation de l'espace disque.
  • Évitez le champ _all et implémentez une alternative avec copy_to pour améliorer les performances de recherche.
  • Appliquez "dynamic": "strict" pour les données structurées afin de prévenir l'ajout automatique de champs indésirables.
  • Utilisez le type keyword pour les champs nécessitant des correspondances exactes, offrant une meilleure efficacité et réduisant le stockage.

Étiquettes: Elasticsearch index-template mapping settings keyword

Publié le 11 juillet à 16h26