RousselTMLEARNING

Observabilité

Mappings et analyse de texte Elasticsearch : types de champs, analyseurs et mapping dynamique

Maîtriser les mappings Elasticsearch : types de champs (text, keyword, numériques, date, ip, nested), multi-fields, mapping dynamique et strict, runtime fields, analyseurs, tokenizers, filtres et analyseur français.

1. Les types de champs #

Le bon type pour le bon usage.

Types #

TypePourExemple
textRecherche plein texte (analysé)Description d'un produit
keywordFiltres, tris, agrégations (valeur exacte)Code pays, statut, identifiant
long, double, scaled_floatCalculs, plagesPrix, durée
dateSéries temporelles@timestamp
ip, geo_pointAdresses IP (plages CIDR), positionsclient.ip, location
nestedTableaux d'objets interrogés objet par objetLignes d'une commande
PUT products
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "name":  { "type": "text", "analyzer": "french", "fields": { "raw": { "type": "keyword" } } },
      "sku":   { "type": "keyword" },
      "price": { "type": "scaled_float", "scaling_factor": 100 },
      "lines": { "type": "nested", "properties": { "sku": { "type": "keyword" }, "qty": { "type": "integer" } } }
    }
  }
}
Erreur Courante : Le mapping dynamique devine les types au premier document : une chaîne devient text + keyword, un nombre écrit entre guillemets reste une chaîne. En production, définissez les mappings dans des templates et utilisez dynamic: strict ou runtime.

2. L'analyse de texte #

Ce qui est vraiment indexé.

Analyseurs #

Chaîne d'analyse d'un champ text
POST _analyze
{ "analyzer": "french", "text": "L'été arrive, les arrivées sont prévues." }

PUT articles
{
  "settings": {
    "analysis": {
      "analyzer": {
        "fr_custom": { "tokenizer": "standard",
                       "filter": [ "lowercase", "asciifolding", "french_elision", "french_stop", "french_stemmer" ] }
      },
      "filter": {
        "french_elision": { "type": "elision", "articles_case": true, "articles": ["l", "d", "j", "qu", "c", "n", "s", "t", "m"] },
        "french_stop":    { "type": "stop", "stopwords": "_french_" },
        "french_stemmer": { "type": "stemmer", "language": "light_french" }
      }
    }
  }
}
Bonne Pratique : Testez toujours un analyseur avec _analyze sur de vraies phrases : c'est le moyen le plus rapide de comprendre pourquoi une recherche ne trouve pas un document.

Articles liés

Architecture distribuée Elasticsearch : rôles des nœuds, shards, répliques et allocation

Comprendre le fonctionnement distribué d'Elasticsearch : rôles des nœuds, nœuds master et quorum, cluster sta…

Ingestion Elasticsearch : Bulk API, ingest pipelines, enrich et reindex

Ingérer et transformer des données dans Elasticsearch : Bulk API, ingest pipelines et processeurs (grok, diss…

Index Lifecycle Management (ILM) : data tiers, rollover et rétention

Automatiser le cycle de vie des index avec ILM : data tiers hot, warm, cold et frozen, rollover par taille et…

Pour aller plus loin