Choisissez l'analyseur adapté à votre cas d'utilisation

Ce guide se concentre sur les aspects pratiques de la prise de décision pour le choix d’un analyseur. Pour plus de détails techniques sur les composants des analyseurs et sur la manière d’ajouter des paramètres d’analyse, consultez la section Présentation des analyseurs.

Comprendre les analyseurs en 2 minutes

Dans Milvus, un analyseur traite le texte stocké dans ce champ afin de le rendre consultable pour des fonctionnalités telles que la recherche en texte intégral (BM25), la correspondance de phrases ou la correspondance de texte. Considérez-le comme un processeur de texte qui transforme votre contenu brut en tokens consultables.

Un analyseur fonctionne selon un pipeline simple en deux étapes :

Analyzer Workflow Flux de travail de l’analyseur

  1. Tokenisation (obligatoire) : cette étape initiale consiste à appliquer un tokeniseur pour diviser une chaîne de texte continue en unités distinctes et significatives appelées « tokens ». La méthode de tokenisation peut varier considérablement en fonction de la langue et du type de contenu.

  2. Filtrage des tokens (facultatif) : après la tokenisation, des filtres sont appliqués pour modifier, supprimer ou affiner les tokens. Ces opérations peuvent inclure la conversion de tous les tokens en minuscules, la suppression de mots courants sans signification (tels que les mots vides) ou la réduction des mots à leur forme racine (stemming).

Exemple:

Input: "Hello World!" 
       1. Tokenization → ["Hello", "World", "!"]
       2. Lowercase & Punctuation Filtering → ["hello", "world"]

Pourquoi le choix de l’analyseur est-il important ?

Le choix d’un analyseur inadapté peut rendre des documents pertinents introuvables ou renvoyer des résultats non pertinents.

Le tableau suivant résume les problèmes courants causés par un mauvais choix d’analyseur et propose des solutions concrètes pour diagnostiquer les problèmes de recherche.

Problème

Symptôme

Exemple (entrée et sortie)

Cause (mauvais analyseur)

Solution (bon analyseur)

Tokenisation excessive

Les requêtes textuelles portant sur des termes techniques, des identifiants ou des URL ne permettent pas de trouver de documents pertinents.

  • "user_id"['user', 'id']

  • "C++"['c']

standard analyseur

Utilisez un whitespace tokeniseur ; associez-le à un alphanumonly filtre.

Sous-tokenisation

La recherche d’un élément d’une expression composée de plusieurs mots ne renvoie pas les documents contenant l’expression complète.

"state-of-the-art"['state-of-the-art']

Analyseur avec un whitespace tokeniseur

Utilisez un standard tokenizer pour effectuer la segmentation en fonction de la ponctuation et des espaces ; utilisez un filtre d'expressions régulières personnalisé.

Incohérences linguistiques

Les résultats de recherche pour une langue spécifique n'ont aucun sens ou sont inexistants.

Texte en chinois : "机器学习"['机器学习'] (un seul token)

english analyseur

Utilisez un analyseur spécifique à la langue, tel que chinese.

Incompatibilité entre les méthodes de saisie

Les utilisateurs saisissent du pinyin, mais le texte indexé utilise des caractères chinois.

Texte en chinois : "足球"; texte de la requête : "zuqiu"

Analyseur ne générant que des tokens de caractères chinois

Utilisez un analyseur personnalisé avec le jieba tokenizer et pinyin filtre.

Première question : devez-vous choisir un analyseur ?

Dans de nombreux cas d'utilisation, vous n'avez rien de particulier à faire. Voyons si c'est votre cas.

Comportement par défaut : l'analyseur « standard »

Si vous ne spécifiez pas d’analyseur lorsque vous utilisez des fonctionnalités de recherche de texte telles que la recherche en texte intégral, Milvus utilise automatiquement l’ standard analyseur par défaut.

L'analyseur « standard » :

  • Divise le texte en fonction des espaces et des signes de ponctuation

  • Convertit tous les tokens en minuscules

  • Supprime un ensemble intégré de mots vides courants de l’anglais et la plupart des signes de ponctuation

Exemple de transformation:

Input:  "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

Critères de décision : une vérification rapide

Utilisez ce tableau pour déterminer rapidement si l’analyseur par défaut « standard » répond à vos besoins. Si ce n’est pas le cas, vous devrez choisir une autre approche.

Votre contenu

L'analyseur standard convient-il ?

Pourquoi

Ce dont vous avez besoin

Articles de blog en anglais

✅ Oui

Le comportement par défaut est suffisant.

Utilisez les paramètres par défaut (aucune configuration nécessaire).

Documents en chinois

❌ Non

Les mots chinois ne comportent pas d'espaces et seront traités comme un seul token.

Utilisez un chinese .

Documents en arabe

❌ Non

textes arabes peuvent comporter des variantes de lettres, des signes diacritiques, des tatweel, des chiffres arabo-indiens et des mots vides courants en arabe qui nécessitent un traitement spécifique à la langue.

Utilisez un arabic .

Documents en thaï

❌ Non

Le texte thaï ne comporte généralement pas d'espaces entre les mots ; il nécessite donc une segmentation des mots spécifique à la langue.

Utilisez un thai .

Documentation technique

❌ Non

La ponctuation est supprimée des termes tels que « C++ ».

Créez un analyseur personnalisé à l'aide d'un whitespace tokenizer et un alphanumonly filtre.

Langues utilisant des espaces comme séparateurs, telles que le français ou l'espagnol

⚠️ Attention

que les caractères accentués (café vs cafe) ne soient pas reconnus.

Un analyseur personnalisé utilisant le asciifolding est recommandé pour obtenir de meilleurs résultats.

Langues multilingues ou inconnues

❌ Non

L'analyseur standard ne dispose pas de la logique spécifique à chaque langue nécessaire pour gérer les différents jeux de caractères et les règles de tokenisation.

Utilisez un analyseur personnalisé avec le icu le tokenizer pour une tokenisation compatible Unicode.

Vous pouvez également envisager de configurer des analyseurs multilingues ou un identifiant de langue pour une gestion plus précise du contenu multilingue.

Si l’analyseur par défaut « standard » ne répond pas à vos besoins, vous devez en implémenter un autre. Deux options s’offrent à vous :

Option A : Utiliser les analyseurs intégrés

Les analyseurs intégrés sont des solutions préconfigurées pour les langues courantes. Ils constituent le moyen le plus simple de démarrer lorsque l’analyseur standard par défaut ne convient pas parfaitement.

Analyseurs intégrés disponibles

Analyseur

Langage pris en charge

Composants

Remarques

standard

La plupart des langues utilisant des espaces pour séparer les mots (anglais, français, allemand, espagnol, etc.)

  • Tokeniseur : standard

  • Filtres : lowercase

Analyseur polyvalent pour le traitement initial du texte. Dans les scénarios monolingues, les analyseurs spécifiques à une langue (tels que english) offrent de meilleures performances.

english

Dédié à l'anglais, il applique le lemmatisation et la suppression des mots vides pour une meilleure correspondance sémantique en anglais

  • Tokeniseur : standard

  • Filtres : lowercase, stemmer, stop

Recommandé pour les contenus exclusivement en anglais plutôt que standard.

chinese

Chinois

  • Tokeniseur : jieba

  • Filtres : cnalphanumonly

Utilise actuellement le dictionnaire de chinois simplifié par défaut.

arabic

Arabe

  • Tokeniseur : standard

  • Filtres : lowercase, decimaldigit, arabic_normalization, stemmer, stop

Recommandé pour les textes en arabe plutôt que standard.

thai

Thaï

  • Tokeniseur : thai

  • Filtres : lowercase, decimaldigit, stop

Recommandé pour les textes en thaï plutôt que standard ou la tokenisation basée sur les espaces.

Exemple d'implémentation

Pour utiliser un analyseur intégré, il suffit de spécifier son type dans l'analyzer_params lors de la définition du schéma de votre champ.

# Using built-in English analyzer
analyzer_params = {
    "type": "english"
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

Pour plus de détails sur son utilisation, reportez-vous aux sections Recherche en texte intégral, Correspondance de texte ou Correspondance de phrase.

Méthode B : Créer un analyseur personnalisé

Lorsque les options intégrées ne répondent pas à vos besoins, vous pouvez créer un analyseur personnalisé en combinant un tokeniseur avec un ensemble de filtres. Cela vous offre un contrôle total sur le pipeline de traitement du texte.

Étape 1 : Sélectionnez le tokeniseur en fonction de la langue

Choisissez votre tokenizer en fonction de la langue principale de votre contenu :

Langues occidentales

Pour les langues utilisant des espaces comme séparateurs, vous disposez des options suivantes :

Tokeniseur

Fonctionnement

Idéal pour

Exemples

standard

Divise le texte en fonction des espaces et des signes de ponctuation

Texte général, ponctuation variée

  • Entrée : "Hello, world! Visit example.com"

  • Résultat : ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

Segmente uniquement en fonction des espaces

Contenu pré-traité, texte formaté par l'utilisateur

  • Entrée : "user_id = get_user_data()"

  • Sortie : ['user_id', '=', 'get_user_data()']

Langues d'Asie de l'Est

Les langues qui n’utilisent pas systématiquement d’espaces entre les mots nécessitent des tokeniseurs spécialisés pour une segmentation correcte des mots :

Chinois

Tokeniseur

Fonctionnement

Idéal pour

Exemples

jieba

Segmentation basée sur un dictionnaire chinois et un algorithme intelligent

Recommandé pour les contenus en chinois: combine un dictionnaire et des algorithmes intelligents, spécialement conçus pour le chinois

  • Entrée : "机器学习是人工智能的一个分支"

  • Résultat : ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

Analyse morphologique pure basée sur un dictionnaire chinois (cc-cedict)

Par rapport à jieba, traite le texte chinois de manière plus générique

  • Entrée : "机器学习算法"

  • Résultat : ["机器", "学习", "算法"]

Thaï

Pour la plupart des textes en thaï, utilisez l'analyseur intégré thai . N'utilisez le thai seulement lorsque vous devez créer un pipeline d'analyseurs personnalisé.

Tokeniseur

Fonctionnement

Idéal pour

Exemples

thai

Segmente le texte thaï en tokens de mots et filtre les segments composés uniquement d’espaces et de signes de ponctuation

Pipelines d'analyse personnalisés pour les textes en thaï ou mixtes (thaï/anglais)

  • Entrée : "สวัสดี! ทดสอบ, ระบบ Milvus"

  • Sortie : ['สวัสดี', 'ทดสอบ', 'ระบบ', 'Milvus']

Japonais et coréen

Langue

Tokeniseur

Options du dictionnaire

Idéal pour

Exemples

Japonais

lindera

ipadic (usage général), ipadic-neologd (termes modernes), unidic (académique)

Analyse morphologique avec prise en charge des noms propres

  • Entrée : "東京都渋谷区"

  • Sortie : ["東京", "都", "渋谷", "区"]

Coréen

lindera

ko-dic

Analyse morphologique du coréen

  • Entrée : "안녕하세요"

  • Sortie : ["안녕", "하", "세요"]

Langues multilingues ou inconnues

Pour les contenus dont les langues sont imprévisibles ou mélangées au sein d'un même document :

Tokeniseur

Fonctionnement

Idéal pour

Exemples

icu

Tokenisation compatible Unicode (International Components for Unicode)

Écritures mixtes, langues inconnues ou lorsque la tokenisation simple suffit

  • Entrée : "Hello 世界 مرحبا"

  • Sortie : ['Hello', ' ', '世界', ' ', 'مرحبا']

Quand utiliser icu:

  • Langues mixtes pour lesquelles l’identification de la langue est impossible.

  • Vous souhaitez éviter la charge supplémentaire liée aux analyseurs multilingues ou à l'identificateur de langue.

  • Le contenu comporte une langue principale avec, occasionnellement, des mots étrangers qui n’influent que peu sur le sens global (par exemple, un texte en anglais comportant sporadiquement des noms de marque ou des termes techniques en japonais ou en français).

Autres approches: pour un traitement plus précis du contenu multilingue, envisagez d’utiliser des analyseurs multilingues ou l’identificateur de langue. Pour plus de détails, reportez-vous aux sections Analyseurs multilingues ou Identificateur de langue.

Étape 2 : Ajouter des filtres pour améliorer la précision

Après avoir sélectionné votre tokeniseur, appliquez des filtres en fonction de vos besoins de recherche spécifiques et des caractéristiques de votre contenu.

Filtres couramment utilisés

Ces filtres sont essentiels pour la plupart des configurations linguistiques séparées par des espaces (anglais, français, allemand, espagnol, etc.) et améliorent considérablement la qualité de la recherche :

Filtre

Fonctionnement

Quand l'utiliser

Exemples

lowercase

Convertir tous les tokens en minuscules

Universel : s'applique à toutes les langues distinguant les majuscules et les minuscules

  • Entrée : ["Apple", "iPhone"]

  • Résultat : [['apple'], ['iphone']]

stemmer

Réduire les mots à leur forme de base

Langues avec des déclinaisons (anglais, français, allemand, etc.)

Pour l'anglais :

  • Entrée : ["running", "runs", "ran"]

  • Résultat : [['run'], ['run'], ['ran']]

stop

Supprimer les mots courants sans signification

La plupart des langues – particulièrement efficace pour les langues où les mots sont séparés par des espaces

  • Entrée : ["the", "quick", "brown", "fox"]

  • Résultat : [[], ['quick'], ['brown'], ['fox']]

Pour les langues d'Asie de l'Est (chinois, japonais, coréen, etc.), privilégiez plutôt des filtres spécifiques à ces langues. Ces langues utilisent généralement des approches différentes pour le traitement du texte et ne tirent pas forcément un grand bénéfice de la réduction lexicale.

Filtres de normalisation du texte

Ces filtres uniformisent les variations du texte afin d'améliorer la cohérence des correspondances :

Filtre

Fonctionnement

Quand l'utiliser

Exemples

asciifolding

Convertir les caractères accentués en leurs équivalents ASCII

Contenu international, contenu généré par les utilisateurs

  • Entrée : ["café", "naïve", "résumé"]

  • Résultat : [['cafe'], ['naive'], ['resume']]

Filtrage des tokens

Contrôler quels tokens sont conservés en fonction du contenu ou de la longueur des caractères :

Filtrer

Fonctionnement

Quand l'utiliser

Exemples

removepunct

Supprimer les tokens de ponctuation isolés

Nettoyer le résultat des tokeniseurs jieba, lindera et icu, qui renvoient les signes de ponctuation sous forme de tokens individuels

  • Entrée : ["Hello", "!", "world"]

  • Sortie : [['Hello'], ['world']]

alphanumonly

Ne conserver que les lettres et les chiffres

Contenu technique, traitement du texte épuré

  • Entrée : ["user123", "test@email.com"]

  • Résultat : [['user123'], ['test', 'email', 'com']]

length

Supprimer les tokens ne respectant pas la plage de longueur spécifiée

Filtrer le bruit (tokens trop longs)

  • Entrée : ["a", "very", "extraordinarily"]

  • Sortie : [['a'], ['very'], []] (si max = 10)

regex

Filtrage personnalisé basé sur des modèles

Exigences spécifiques au domaine concernant les tokens

  • Entrée : ["test123", "prod456"]

  • Sortie : [[], ['prod456']] (si expr="^prod")

Filtres spécifiques à une langue

Ces filtres prennent en charge les caractéristiques spécifiques à chaque langage :

Filtre

Langue

Fonctionnement

Exemples

decompounder

Allemand

Divise les mots composés en éléments pouvant faire l'objet d'une recherche

  • Entrée : ["dampfschifffahrt"]

  • Résultat : [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

Chinois

Conserve les caractères chinois et les caractères alphanumériques

  • Entrée : ["Hello", "世界", "123", "!@#"]

  • Résultat : [['Hello'], ['世界'], ['123'], []]

cncharonly

Chinois

Conserve uniquement les caractères chinois

  • Entrée : ["Hello", "世界", "123"]

  • Résultat : [[], ['世界'], []]

pinyin

Chinois

Génère des formes de tokens en pinyin pour les tokens chinois

  • Entrée : ["中文"]

  • Sortie : [['中文', 'zhong', 'wen']]

Étape 3 : Combiner et implémenter

Pour créer votre analyseur personnalisé, vous devez définir le tokenizer et une liste de filtres dans le dictionnaire « analyzer_params ». Les filtres sont appliqués dans l'ordre dans lequel ils sont répertoriés.

# Example: A custom analyzer for technical content
analyzer_params = {
    "tokenizer": "whitespace",
    "filter": ["lowercase", "alphanumonly"]
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

Étape finale : test avec run_analyzer

Vérifiez toujours votre configuration avant de l'appliquer à une collection :

# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"

# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

Problèmes courants à vérifier :

  • Sur-tokenisation: les termes techniques sont incorrectement segmentés

  • Sous-tokenisation: les expressions ne sont pas séparées correctement

  • Token manquants: des termes importants sont filtrés

Pour une utilisation détaillée, consultez run_analyzer.

Cette section présente les configurations recommandées pour les tokeniseurs et les filtres dans le cadre des cas d’utilisation courants avec les analyseurs de Milvus. Choisissez la combinaison la mieux adaptée à votre type de contenu et à vos besoins en matière de recherche.

Avant d’appliquer un analyseur à votre collection, nous vous recommandons d’utiliser run_analyzer pour tester et valider les performances de l’analyse de texte.

Langues comportant des accents (français, espagnol, allemand, etc.)

Utilisez un tokenizer « standard » avec conversion en minuscules, lemmatisation spécifique à la langue et suppression des mots vides. Cette configuration fonctionne également pour d’autres langues européennes en modifiant les paramètres « language » et « stop_words ».

# French example
analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase", 
        "asciifolding",  # Handle accent marks
        {
            "type": "stemmer",
            "language": "french"
        },
        {
            "type": "stop",
            "stop_words": ["_french_"]
        }
    ]
}

# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly

Contenu en anglais

Pour le traitement de textes en anglais avec un filtrage complet. Vous pouvez également utiliser l’analyseur intégré english :

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase",
        {
            "type": "stemmer",
            "language": "english"
        },
        {
            "type": "stop",
            "stop_words": ["_english_"]
        }
    ]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "english"
}

Contenu en chinois

Utilisez le tokenizer jieba et appliquez un filtre de caractères pour ne conserver que les caractères chinois, les lettres latines et les chiffres.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["cnalphanumonly"]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "chinese"
}

Pour le chinois simplifié, cnalphanumonly supprime tous les tokens à l’exception des caractères chinois, du texte alphanumérique et des chiffres. Cela empêche la ponctuation d’affecter la qualité de la recherche.

Si les utilisateurs sont susceptibles d’effectuer des recherches sur du texte chinois en saisissant du pinyin, utilisez un analyseur personnalisé avec le tokeniseur « jieba » et le pinyin filtre au lieu de l’analyseur « chinese » intégré.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["pinyin"]
}

Contenu japonais

Utilisez le tokeniseur « lindera » avec le dictionnaire japonais et des filtres pour nettoyer la ponctuation et contrôler la longueur des tokens :

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ipadic"  # Options: ipadic, ipadic-neologd, unidic
    },
    "filter": [
        "removepunct",  # Remove standalone punctuation
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

Contenu coréen

Comme pour le japonais, utilisez le tokenizer « lindera » avec le dictionnaire coréen :

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ko-dic"
    },
    "filter": [
        "removepunct",
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

Contenu mixte ou multilingue

Lorsque vous travaillez avec du contenu couvrant plusieurs langues ou utilisant des scripts de manière imprévisible, commencez par utiliser l’analyseur icu. Cet analyseur compatible Unicode gère efficacement les scripts et symboles mixtes.

Configuration multilingue de base (sans lemmatisation):

analyzer_params = {
    "tokenizer": "icu",
    "filter": ["lowercase", "asciifolding"]
}

Traitement multilingue avancé:

Pour un meilleur contrôle du comportement des tokens dans différentes langues :

  • Utilisez une configuration d’analyseur multilingue. Pour plus de détails, consultez la section Analyseurs multilingues.

  • Implémentez un identifiant de langue sur votre contenu. Pour plus de détails, consultez la section « Identifiant de langue ».

Intégration aux fonctionnalités de recherche de texte

Après avoir sélectionné votre analyseur, vous pouvez l'intégrer aux fonctionnalités de recherche de texte fournies par Milvus.

  • Recherche en texte intégral

    Les analyseurs ont un impact direct sur la recherche en texte intégral basée sur l’algorithme BM25 grâce à la génération de vecteurs clairsemés. Utilisez le même analyseur pour l’indexation et les requêtes afin de garantir une tokenisation cohérente. Les analyseurs spécifiques à une langue offrent généralement un meilleur score BM25 que les analyseurs génériques. Pour plus de détails sur la mise en œuvre, consultez la section « Recherche en texte intégral ».

  • Correspondance de texte

    Les opérations de correspondance de texte effectuent une correspondance exacte des tokens entre les requêtes et le contenu indexé, en fonction du résultat de votre analyseur. Pour plus de détails sur la mise en œuvre, consultez la section « Correspondance de texte ».

  • Correspondance de phrases

    La correspondance de phrases nécessite une tokenisation cohérente des expressions composées de plusieurs mots afin de préserver les limites et le sens des phrases. Pour plus de détails sur la mise en œuvre, consultez la section « Correspondance de phrases ».