Wählen Sie den richtigen Analyzer für Ihren Anwendungsfall

Dieser Leitfaden konzentriert sich auf die praktische Entscheidungsfindung bei der Auswahl eines Analysators. Technische Details zu Analysator-Komponenten und zum Hinzufügen von Analysator-Parametern finden Sie im Abschnitt Analysator-Übersicht.

Analyzer in 2 Minuten verstehen

In Milvus verarbeitet ein Analysator den in diesem Feld gespeicherten Text, um ihn für Funktionen wie Volltextsuche (BM25), Phrasenübereinstimmung oder Textübereinstimmung durchsuchbar zu machen. Betrachten Sie ihn als einen Textprozessor, der Ihren Rohinhalt in durchsuchbare Token umwandelt.

Ein Analyzer arbeitet in einer einfachen, zweistufigen Pipeline:

Analyzer Workflow Analyzer Arbeitsablauf

  1. Tokenisierung (erforderlich): In dieser ersten Phase wird ein Tokenizer eingesetzt, um eine fortlaufende Textkette in diskrete, aussagekräftige Einheiten, so genannte Token, zu zerlegen. Die Tokenisierungsmethode kann je nach Sprache und Inhaltstyp erheblich variieren.

  2. Token-Filterung (optional): Nach der Tokenisierung werden Filter angewendet, um die Token zu ändern, zu entfernen oder zu verfeinern. Diese Operationen können die Umwandlung aller Token in Kleinbuchstaben, das Entfernen von bedeutungslosen Wörtern (z. B. Stoppwörter) oder die Reduzierung von Wörtern auf ihre Stammform (Stemming) umfassen.

Beispiel:

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

Warum die Wahl des Analysators wichtig ist

Die Wahl des falschen Analysators kann dazu führen, dass relevante Dokumente nicht durchsuchbar sind oder irrelevante Ergebnisse geliefert werden.

Die folgende Tabelle fasst häufige Probleme zusammen, die durch die falsche Wahl des Analyzers verursacht werden, und bietet umsetzbare Lösungen für die Diagnose von Suchproblemen.

Problem

Symptom

Beispiel (Input & Output)

Ursache (schlechter Analyzer)

Lösung (guter Analyzer)

Über-Tokenisierung

Bei Textabfragen nach Fachbegriffen, Bezeichnern oder URLs werden relevante Dokumente nicht gefunden.

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

  • "C++"['c']

standard Analysator

Verwenden Sie einen whitespace Tokenizer; kombiniert mit einem alphanumonly Filter.

Unter-Tokenisierung

Die Suche nach einer Komponente einer Mehrwortphrase führt nicht zu Dokumenten, die die vollständige Phrase enthalten.

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

Analyzer mit einem whitespace Tokenisierer

Verwenden Sie einen standard Tokenizer, um Interpunktion und Leerzeichen aufzuspalten; verwenden Sie einen benutzerdefinierten Regex-Filter.

Sprachliche Unstimmigkeiten

Die Suchergebnisse für eine bestimmte Sprache sind unsinnig oder nicht vorhanden.

Chinesischer Text: "机器学习"['机器学习'] (ein Token)

english Analysator

Verwenden Sie einen sprachspezifischen Analyzer, wie z. B. chinese.

Erste Frage: Müssen Sie einen Analyzer auswählen?

Für viele Anwendungsfälle brauchen Sie nichts Besonderes zu tun. Lassen Sie uns herausfinden, ob Sie einer von ihnen sind.

Standardverhalten: standard analyzer

Wenn Sie bei der Verwendung von Textsuchfunktionen wie der Volltextsuche keinen Analyzer angeben, verwendet Milvus automatisch den standard Analysator.

Der standard Analyzer:

  • Teilt Text an Leerzeichen und Interpunktion

  • Konvertiert alle Token in Kleinbuchstaben

  • Entfernt einen eingebauten Satz gängiger englischer Stoppwörter und die meisten Interpunktionszeichen

Beispiel einer Umwandlung:

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

Entscheidungskriterien: Eine schnelle Prüfung

Anhand dieser Tabelle können Sie schnell feststellen, ob der Standard-Analysator standard Ihren Anforderungen entspricht. Wenn dies nicht der Fall ist, müssen Sie einen anderen Weg wählen.

Ihr Inhalt

Standard-Analysator OK?

Warum

Was Sie brauchen

Englische Blogbeiträge

✅ Ja

Standardverhalten ist ausreichend.

Verwenden Sie die Standardeinstellung (keine Konfiguration erforderlich).

Chinesische Dokumente

❌ Nein

Chinesische Wörter haben keine Leerzeichen und werden als ein Token behandelt.

Verwenden Sie einen eingebauten chinese Analysator.

Technische Dokumentation

❌ Nein

Interpunktion wird aus Begriffen wie C++ entfernt.

Erstellen Sie einen eigenen Analyzer mit einem whitespace Tokenizer und einem alphanumonly Filter.

Durch Leerzeichen getrennte Sprachen wie z.B. französischer/spanischer Text

⚠️ Vielleicht

Akzentuierte Zeichen (café vs. cafe) stimmen möglicherweise nicht überein.

Ein benutzerdefinierter Analyzer mit dem asciifolding wird für bessere Ergebnisse empfohlen.

Mehrsprachige oder unbekannte Sprachen

❌ Nein

Dem Analyseprogramm standard fehlt die sprachspezifische Logik, die für die Behandlung unterschiedlicher Zeichensätze und Tokenisierungsregeln erforderlich ist.

Verwenden Sie einen eigenen Analyzer mit dem icu Tokenizer für Unicode-fähige Tokenisierung.

Alternativ können Sie auch mehrsprachige Analysatoren oder einen Sprachidentifikator für eine präzisere Behandlung mehrsprachiger Inhalte konfigurieren.

Wenn der standardmäßige standard Analyzer Ihre Anforderungen nicht erfüllen kann, müssen Sie einen anderen Analyzer implementieren. Sie haben zwei Möglichkeiten:

Weg A: Integrierte Analysatoren verwenden

Integrierte Analyzer sind vorkonfigurierte Lösungen für gängige Sprachen. Sie sind der einfachste Weg für den Einstieg, wenn der Standard-Analysator nicht perfekt passt.

Verfügbare integrierte Analyzer

Analyzer

Sprachunterstützung

Komponenten

Hinweise

standard

Die meisten durch Leerzeichen getrennten Sprachen (Englisch, Französisch, Deutsch, Spanisch, usw.)

  • Tokenisierer: standard

  • Filter: lowercase

Allzweck-Analysator für die erste Textverarbeitung. Für einsprachige Szenarien bieten sprachspezifische Analysatoren (wie english) eine bessere Leistung.

english

Speziell für Englisch, das Stemming und die Entfernung von Stoppwörtern für eine bessere semantische Übereinstimmung mit Englisch anwendet

  • Tokenisierer: standard

  • Filter: lowercase, stemmer, stop

Empfohlen für rein englische Inhalte über standard.

chinese

Chinesisch

  • Tokenisierer: jieba

  • Filter: cnalphanumonly

Derzeit wird standardmäßig das Wörterbuch für vereinfachtes Chinesisch verwendet.

Beispiel für die Implementierung

Um einen eingebauten Analyzer zu verwenden, geben Sie einfach seinen Typ in analyzer_params an, wenn Sie Ihr Feldschema definieren.

# 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,
)

Detaillierte Informationen zur Verwendung finden Sie unter Volltextsuche, Textabgleich oder Phrasenabgleich.

Weg B: Erstellen eines benutzerdefinierten Analyzers

Wenn die integrierten Optionen Ihren Anforderungen nicht genügen, können Sie einen benutzerdefinierten Analyzer erstellen, indem Sie einen Tokenizer mit einer Reihe von Filtern kombinieren. Damit haben Sie die volle Kontrolle über die Textverarbeitungspipeline.

Schritt 1: Wählen Sie den Tokenizer anhand der Sprache aus

Wählen Sie den Tokenizer auf der Grundlage der Hauptsprache Ihres Inhalts:

Westliche Sprachen

Für durch Leerzeichen getrennte Sprachen haben Sie diese Optionen:

Tokenizer

Wie es funktioniert

Am besten geeignet für

Beispiele

standard

Trennt Text anhand von Leerzeichen und Satzzeichen

Allgemeiner Text, gemischte Zeichensetzung

  • Eingabe: "Hello, world! Visit example.com"

  • Ausgabe: ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

Teilt nur nach Leerzeichen auf

Vorverarbeiteter Inhalt, benutzerformatierter Text

  • Eingabe: "user_id = get_user_data()"

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

Ostasiatische Sprachen

Wörterbuchbasierte Sprachen erfordern spezielle Tokenizer für eine korrekte Wortsegmentierung:

Chinesisch

Tokenisierer

Wie es funktioniert

Am besten geeignet für

Beispiele

jieba

Chinesische wörterbuchbasierte Segmentierung mit intelligentem Algorithmus

Empfohlen für chinesische Inhalte - kombiniert Wörterbuch mit intelligenten Algorithmen, speziell für Chinesisch entwickelt

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

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

lindera

Rein wörterbuchbasierte morphologische Analyse mit chinesischem Wörterbuch(cc-cedict)

Verarbeitet im Vergleich zu jieba chinesische Texte auf eine allgemeinere Weise

  • Eingabe: "机器学习算法"

  • Ausgabe: ["机器", "学习", "算法"]

Japanisch und Koreanisch

Sprache

Tokenisierer

Wörterbuch-Optionen

Am besten für

Beispiele

Japanisch

lindera

ipadisch (allgemeiner Gebrauch), ipadisch-neologd (moderne Begriffe), unidisch (akademisch)

Morphologische Analyse mit Behandlung von Eigennamen

  • Eingabe: "東京都渋谷区"

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

Koreanisch

lindera

ko-dic

Koreanische morphologische Analyse

  • Eingabe: "안녕하세요"

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

Mehrsprachige oder unbekannte Sprachen

Für Inhalte, bei denen die Sprachen nicht vorhersehbar sind oder in den Dokumenten gemischt werden:

Tokenisierer

Wie es funktioniert

Am besten für

Beispiele

icu

Unicode-fähige Tokenisierung (Internationale Komponenten für Unicode)

Gemischte Schriften, unbekannte Sprachen, oder wenn einfache Tokenisierung ausreicht

  • Eingabe: "Hello 世界 مرحبا"

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

Wann sollte icu verwendet werden?

  • Gemischte Sprachen, bei denen eine Sprachidentifizierung unpraktisch ist.

  • Sie wollen den Overhead von mehrsprachigen Analysatoren oder den Sprachidentifikator nicht haben.

  • Der Inhalt besteht aus einer Hauptsprache mit gelegentlichen Fremdwörtern, die wenig zur Gesamtbedeutung beitragen (z. B. englischer Text mit sporadischen Markennamen oder technischen Begriffen auf Japanisch oder Französisch).

Alternative Ansätze: Für einen präziseren Umgang mit mehrsprachigem Inhalt sollten Sie die Verwendung von mehrsprachigen Analysatoren oder des Sprachidentifikators in Betracht ziehen. Weitere Informationen finden Sie unter Mehrsprachige Analysatoren oder Sprachidentifikator.

Schritt 2: Hinzufügen von Filtern für mehr Präzision

Nachdem Sie Ihren Tokenizer ausgewählt haben, wenden Sie Filter an, die auf Ihren spezifischen Suchanforderungen und Inhaltsmerkmalen basieren.

Häufig verwendete Filter

Diese Filter sind für die meisten durch Leerzeichen getrennten Sprachkonfigurationen (Englisch, Französisch, Deutsch, Spanisch, usw.) unerlässlich und verbessern die Suchqualität erheblich:

Filter

Wie funktioniert es?

Wann zu verwenden

Beispiele

lowercase

Alle Token in Kleinbuchstaben umwandeln

Universal - gilt für alle Sprachen mit Groß- und Kleinschreibung

  • Eingabe: ["Apple", "iPhone"]

  • Ausgabe: [['apple'], ['iphone']]

stemmer

Wörter auf ihre Stammform reduzieren

Sprachen mit Wortbeugungen (Englisch, Französisch, Deutsch, etc.)

Für Englisch:

  • Eingabe: ["running", "runs", "ran"]

  • Ausgabe: [['run'], ['run'], ['ran']]

stop

Gemeinsame bedeutungslose Wörter entfernen

Die meisten Sprachen - besonders effektiv für Sprachen mit Leerzeichen-Trennung

  • Eingabe: ["the", "quick", "brown", "fox"]

  • Ausgabe: [[], ['quick'], ['brown'], ['fox']]

Bei ostasiatischen Sprachen (Chinesisch, Japanisch, Koreanisch usw.) sollten Sie sich stattdessen auf sprachspezifische Filter konzentrieren. Diese Sprachen verwenden in der Regel andere Ansätze für die Textverarbeitung und profitieren möglicherweise nicht wesentlich vom Stemming.

Textnormalisierungsfilter

Diese Filter standardisieren Textvariationen, um die Konsistenz des Abgleichs zu verbessern:

Filter

Wie funktioniert er?

Wann zu verwenden

Beispiele

asciifolding

Konvertierung von Zeichen mit Akzent in ASCII-Äquivalente

Internationale Inhalte, nutzergenerierte Inhalte

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

  • Ausgabe: [['cafe'], ['naive'], ['resume']]

Token-Filterung

Steuern Sie, welche Token auf der Grundlage von Zeicheninhalt oder -länge erhalten bleiben:

Filter

Wie es funktioniert

Wann zu verwenden

Beispiele

removepunct

Eigenständige Satzzeichen entfernen

Bereinigung der Ausgabe von jieba, lindera, icu Tokenizern, die Interpunktionen als einzelne Token zurückgeben

  • Eingabe: ["Hello", "!", "world"]

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

alphanumonly

Nur Buchstaben und Zahlen behalten

Technischer Inhalt, saubere Textverarbeitung

  • Eingabe: ["user123", "test@email.com"]

  • Ausgabe: [['user123'], ['test', 'email', 'com']]

length

Entfernen von Token außerhalb des angegebenen Längenbereichs

Rauschen filtern (übermäßig lange Token)

  • Eingabe: ["a", "very", "extraordinarily"]

  • Ausgabe: [['a'], ['very'], []] (wenn max=10)

regex

Benutzerdefinierte musterbasierte Filterung

Domänenspezifische Token-Anforderungen

  • Eingabe: ["test123", "prod456"]

  • Ausgabe: [[], ['prod456']] (wenn expr="^prod")

Sprachspezifische Filter

Diese Filter behandeln spezifische Sprachmerkmale:

Filter

Sprache

Wie es funktioniert

Beispiele

decompounder

Deutsch

Zerlegt zusammengesetzte Wörter in durchsuchbare Komponenten

  • Eingabe: ["dampfschifffahrt"]

  • Ausgabe: [['dampf', 'schiff', 'fahrt']]

cnalphanumnur

Chinesisch

Behält chinesische Zeichen + alphanumerische Zeichen bei

  • Eingabe: ["Hello", "世界", "123", "!@#"]

  • Ausgabe: [['Hello'], ['世界'], ['123'], []]

cncharonly

Chinesisch

Behält nur chinesische Zeichen bei

  • Eingabe: ["Hello", "世界", "123"]

  • Ausgabe: [[], ['世界'], []]

Schritt 3: Kombinieren und implementieren

Um Ihren eigenen Analysator zu erstellen, definieren Sie den Tokenizer und eine Liste von Filtern im analyzer_params Wörterbuch. Die Filter werden in der Reihenfolge angewendet, in der sie aufgelistet sind.

# 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,
)

Abschluss: Testen Sie mit run_analyzer

Überprüfen Sie immer Ihre Konfiguration, bevor Sie sie auf eine Sammlung anwenden:

# 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)

Häufig zu prüfende Probleme:

  • Über-Tokenisierung: Fachbegriffe werden falsch aufgeteilt

  • Untertokenisierung: Phrasen werden nicht richtig getrennt

  • Fehlende Token: Wichtige Begriffe werden herausgefiltert

Ausführliche Informationen zur Verwendung finden Sie unter run_analyzer.

Dieser Abschnitt enthält empfohlene Tokenizer- und Filterkonfigurationen für häufige Anwendungsfälle bei der Arbeit mit Analyzern in Milvus. Wählen Sie die Kombination, die am besten zu Ihrem Inhaltstyp und Ihren Suchanforderungen passt.

Bevor Sie einen Analyzer auf Ihre Sammlung anwenden, empfehlen wir Ihnen die Verwendung von run_analyzer zu verwenden, um die Leistung der Textanalyse zu testen und zu validieren.

Sprachen mit Akzentzeichen (Französisch, Spanisch, Deutsch, etc.)

Verwenden Sie einen standard Tokenizer mit Kleinbuchstaben-Konvertierung, sprachspezifischem Stemming und Stoppwort-Entfernung. Diese Konfiguration funktioniert auch für andere europäische Sprachen, indem die Parameter language und stop_words geändert werden.

# 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

Englischer Inhalt

Für englische Textverarbeitung mit umfassender Filterung. Sie können auch den eingebauten english Analysator verwenden:

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

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

Chinesischer Inhalt

Verwenden Sie den jieba Tokenizer und wenden Sie einen Zeichenfilter an, um nur chinesische Zeichen, lateinische Buchstaben und Ziffern zu erhalten.

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

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

Bei vereinfachtem Chinesisch entfernt cnalphanumonly alle Token außer chinesischen Zeichen, alphanumerischem Text und Ziffern. Dadurch wird verhindert, dass die Interpunktion die Suchqualität beeinträchtigt.

Japanischer Inhalt

Verwenden Sie den lindera Tokenizer mit einem japanischen Wörterbuch und Filtern, um Interpunktion zu entfernen und die Tokenlänge zu kontrollieren:

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

Koreanischer Inhalt

Ähnlich wie bei japanischen Inhalten wird der lindera Tokenizer mit einem koreanischen Wörterbuch verwendet:

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

Gemischte oder mehrsprachige Inhalte

Wenn Sie mit Inhalten arbeiten, die sich über mehrere Sprachen erstrecken oder Skripte auf unvorhersehbare Weise verwenden, beginnen Sie mit dem icu Analysator. Dieser Unicode-fähige Analyzer verarbeitet gemischte Schriften und Symbole effektiv.

Einfache mehrsprachige Konfiguration (kein Stemming):

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

Erweiterte mehrsprachige Verarbeitung:

Für eine bessere Kontrolle über das Verhalten von Token in verschiedenen Sprachen:

  • Verwenden Sie eine mehrsprachige Analyzer-Konfiguration. Einzelheiten finden Sie unter Mehrsprachige Analyzer.

  • Implementieren Sie einen Sprachidentifikator für Ihren Inhalt. Weitere Informationen finden Sie unter Sprachidentifikator.

Integration mit Textabfragefunktionen

Nachdem Sie Ihren Analyzer ausgewählt haben, können Sie ihn in die von Milvus bereitgestellten Textsuchfunktionen integrieren.

  • Volltextsuche

    Analyzer wirken sich direkt auf die BM25-basierte Volltextsuche aus, indem sie einen Sparse-Vektor erzeugen. Verwenden Sie denselben Analyzer sowohl für die Indizierung als auch für die Abfrage, um eine konsistente Tokenisierung zu gewährleisten. Sprachspezifische Analyzer bieten im Allgemeinen eine bessere BM25-Bewertung als generische Analyzer. Einzelheiten zur Implementierung finden Sie unter Volltextsuche.

  • Textabgleich

    Textabgleichsoperationen führen einen exakten Tokenabgleich zwischen Abfragen und indiziertem Inhalt auf der Grundlage Ihrer Analysatorausgabe durch. Einzelheiten zur Implementierung finden Sie unter Textabgleich.

  • Phrasenabgleich

    Der Phrasenabgleich erfordert eine konsistente Tokenisierung von Mehrwortausdrücken, um die Phrasengrenzen und die Bedeutung beizubehalten. Einzelheiten zur Implementierung finden Sie unter Phrasenabgleich.