Implémentation des Synonymes Dynamiques dans Elasticsearch : Stratégies et Rechargement à Chaud

L'optimisation du taux de rappel constitue un défi majeur dans la conception des moteurs de recherche. Les utilisateurs emploient fréquemment des termes variés pour désigner un même concept. L'expansion par synonymes permet au système de comprendre ces nuances sémantiques et d'éviter l'omission de documents pertinents.

La gestion des synonymes via des fichiers statiques atteint rapidement ses limites face à l'évolution constante du vocabulaire métier. Les mises à jour nécessitant un redémarrage du cluster ou une réindexation sont souvent proscrites en environnement de production. L'introduction de l'API _reload_search_analyzers dans Elasticsearch 7.3 a permis de surmonter cette contrainte en autorisant le rechargement à chaud des dictionnaires.

1. Stratégies d'Application : Indexation versus Recherche

Le choix entre l'expansion à l'indexation et l'expansion à la recherche impacte directement les performances, la flexibilité et les coûts de maintenance du cluster.

1.1 Expansion à l'Indexation

Cette méthode consiste à enrichir le document avec ses synonymes dès son ingestion. Si un document contient "ordinateur portable", l'analyseur génère et indexe également "laptop", "notebook" et "PC portable".

Avantages :

  • Performances de requête maximales : aucune résolution de synonymes n'est requise lors de la recherche.
  • Calcul de score précis : les fréquences de termes (TF-IDF, BM25) s'appuient sur l'ensemble des tokens étendus.

Inconvénients :

L'mepreinte disque augmente de manière significative. De plus, l'ajout d'une nouvelle règle de synonymie impose une réindexation complète des données, une opération coûteuse pour les index volumineux.

PUT /catalogue_produits
{
  "settings": {
    "analysis": {
      "filter": {
        "filtre_synonymes_index": {
          "type": "synonym",
          "synonyms": [
            "ordinateur portable, laptop, notebook, pc portable",
            "téléphone intelligent, smartphone, mobile"
          ]
        }
      },
      "analyzer": {
        "analyseur_index": {
          "tokenizer": "standard",
          "filter": ["lowercase", "filtre_synonymes_index"]
        }
      }
    }
  }
}

1.2 Expansion à la Recherche

À l'inverse, cette approche conserve les tokens originaux dans l'index. L'expansion s'opère exclusivement au moment de l'exécution de la requête. Une recherche sur "ordinateur portable" est transformée en "(ordinateur portable OR laptop OR notebook)".

Critère Expansion à la Recherche Expansion à l'Indexation
Taille de l'index Inchangée Augmentation notable
Mise à jour des règles Dynamique Nécessite réindexation
Statistiques de fréquence Basées sur les tokens originaux Basées sur les tokens étendus
Latence de requête Légèrement accrue Minimale
PUT /catalogue_recherche
{
  "settings": {
    "analysis": {
      "filter": {
        "filtre_synonymes_search": {
          "type": "synonym_graph",
          "synonyms_path": "config/synonymes.txt",
          "updateable": true
        }
      },
      "analyzer": {
        "analyseur_search": {
          "tokenizer": "standard",
          "filter": ["lowercase", "filtre_synonymes_search"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "nom_produit": {
        "type": "text",
        "analyzer": "standard",
        "search_analyzer": "analyseur_search"
      }
    }
  }
}

1.3 Approche Hybride

Combiner les deux méthodes permet de tirer parti de leurs avantages respectifs. Les termes normalisés ou les synonymes statiques à haute fréquence sont traités à l'indexation, tandis que le vocabulaire métier évolutif est géré à la recherche.

PUT /systeme_recommandation
{
  "settings": {
    "analysis": {
      "filter": {
        "normalisation_marques": {
          "type": "synonym",
          "synonyms": [
            "apple => marque_apple",
            "samsung => marque_samsung"
          ]
        },
        "synonymes_dynamiques": {
          "type": "synonym_graph", 
          "synonyms_path": "config/synonymes_evolutifs.txt",
          "updateable": true
        }
      },
      "analyzer": {
        "analyseur_hybride_index": {
          "tokenizer": "standard",
          "filter": ["lowercase", "normalisation_marques"]
        },
        "analyseur_hybride_search": {
          "tokenizer": "standard",
          "filter": ["lowercase", "normalisation_marques", "synonymes_dynamiques"]
        }
      }
    }
  }
}

2. Mécanisme de Rechargement à Chaud (Elasticsearch 7.3+)

L'API _reload_search_analyzers résout la problématique de la mise à jour des dictionnaires sans interruption de service. Auparavant, la modification d'un fichier de synonymes exigeait la fermeture et la réouverture de l'index.

2.1 Fonctionnement du Rechargement

Les composants de l'analyseur (tokenizers, filtres de caractères, filtres de tokens) sont traditionnellement initialisés lors de la création de l'index, au démarrage du nœud ou à la réouverture de l'index. L'API de rechargement contourne ces étapes en ciblant spécifiquement les analyseurs marqués comme modifiables sur tous les nœuds du cluster.

Pour activer cette fonctionnalité, le paramètre updateable doit être explicitement défini sur true dans la configuration du filtre de synonymes, et ce filtre ne doit être utilisé que dans un search_analyzer.

{
  "filter": {
    "dictionnaire_rechargeable": {
      "type": "synonym_graph",
      "synonyms_path": "config/mon_fichier_synonymes.txt",
      "updateable": true
    }
  }
}

Étiquettes: Elasticsearch synonyms search-analyzer hot-reload text-analysis

Publié le 18 juillet à 06h41