33 Text-Analyse verstehen und anwenden

Die Text-Analyse ist der Prozess, durch den OpenSearch rohen Text in suchbare Terme umwandelt. Sie ist fundamental für die Qualität Ihrer Suchergebnisse - denn nur was richtig analysiert wurde, kann auch gefunden werden. Stellen Sie sich die Text-Analyse wie einen Übersetzer vor, der die menschliche Sprache in eine Form übersetzt, die OpenSearch optimal verarbeiten kann.

33.1 Die Grundlagen der Text-Analyse verstehen

Bevor wir in die technischen Details eintauchen, ist es wichtig zu verstehen, was während der Text-Analyse geschieht. Nehmen wir ein einfaches Beispiel:

Ein Benutzer hat einen Produkttitel eingegeben: “Der schnelle USB-C Adapter (2m) - Schwarz”

Ohne Analyse würde dieser Text nur gefunden werden, wenn jemand exakt diese Zeichenkette sucht. Das ist natürlich nicht praxistauglich. Die Text-Analyse verwandelt diesen Text in eine Form, die flexible Suchen ermöglicht. Lassen Sie uns den Prozess Schritt für Schritt nachvollziehen:

  1. Character Filter entfernt oder ersetzt unerwünschte Zeichen: “Der schnelle USB-C Adapter (2m) - Schwarz” → “Der schnelle USB C Adapter 2m Schwarz”

  2. Tokenizer zerlegt den Text in einzelne Token: [“Der”, “schnelle”, “USB”, “C”, “Adapter”, “2m”, “Schwarz”]

  3. Token Filter bearbeiten diese Token weiter:

Endresultat: [“schnell”, “usb”, “c”, “adapter”, “2m”, “schwarz”]

Sie können diesen Prozess mit der Analyze API nachvollziehen:

POST _analyze
{
  "analyzer": "standard",
  "text": "Der schnelle USB-C Adapter (2m) - Schwarz"
}

33.2 Die Anatomie eines Analyzers

Ein Analyzer besteht aus drei Hauptkomponenten. Lassen Sie uns diese anhand eines praktischen Beispiels erkunden:

PUT /products
{
  "settings": {
    "analysis": {
      "char_filter": {
        "product_char_filter": {
          "type": "mapping",
          "mappings": [
            "- => ",    // Bindestriche durch Leerzeichen ersetzen
            "/ => ",    // Schrägstriche durch Leerzeichen ersetzen
            "_ => "     // Unterstriche durch Leerzeichen ersetzen
          ]
        }
      },
      "tokenizer": {
        "product_tokenizer": {
          "type": "standard"
        }
      },
      "filter": {
        "german_stop": {
          "type": "stop",
          "stopwords": "_german_"
        },
        "german_stemmer": {
          "type": "stemmer",
          "language": "light_german"
        }
      },
      "analyzer": {
        "product_analyzer": {
          "type": "custom",
          "char_filter": ["product_char_filter"],
          "tokenizer": "product_tokenizer",
          "filter": [
            "lowercase",
            "german_stop",
            "german_stemmer"
          ]
        }
      }
    }
  }
}

Dieser Analyzer ist speziell für die Analyse von Produktbezeichnungen optimiert. Lassen Sie uns verstehen, warum jede Komponente wichtig ist:

  1. Der Character Filter bereitet den Text vor, indem er störende Sonderzeichen entfernt oder ersetzt. Dies ist wichtig, weil Produktbezeichnungen oft Bindestriche oder andere Sonderzeichen enthalten.

  2. Der Standard Tokenizer zerlegt den Text intelligent in Token. Er erkennt Wortgrenzen und behandelt auch Zahlen und Sonderzeichen korrekt.

  3. Die Token Filter führen wichtige Normalisierungen durch:

33.3 Spezielle Analyzer für verschiedene Anwendungsfälle

Verschiedene Textarten benötigen verschiedene Analysestrategien. Hier sind einige spezialisierte Analyzer für typische Anwendungsfälle:

33.3.1 E-Mail-Adressen analysieren

PUT /users
{
  "settings": {
    "analysis": {
      "analyzer": {
        "email_analyzer": {
          "type": "custom",
          "tokenizer": "uax_url_email",
          "filter": [
            "lowercase",
            "unique"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "email": {
        "type": "text",
        "analyzer": "email_analyzer",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

Dieser Analyzer ist speziell für E-Mail-Adressen optimiert:

33.3.2 Produktnummern analysieren

PUT /inventory
{
  "settings": {
    "analysis": {
      "analyzer": {
        "sku_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "word_delimiter_graph"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "sku": {
        "type": "text",
        "analyzer": "sku_analyzer",
        "fields": {
          "exact": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

Dieser Analyzer ist für Produktnummern optimiert:

33.3.3 Mehrsprachige Texte analysieren

PUT /multilingual_content
{
  "settings": {
    "analysis": {
      "filter": {
        "german_decompounder": {
          "type": "dictionary_decompounder",
          "word_list": ["berg", "tal", "straße"]
        }
      },
      "analyzer": {
        "german_content": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "german_normalization",
            "german_decompounder",
            "german_stemmer"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "german_content",
        "fields": {
          "stemmed": {
            "type": "text",
            "analyzer": "german_content"
          }
        }
      }
    }
  }
}

Dieser Analyzer berücksichtigt Besonderheiten der deutschen Sprache:

33.4 Token Filter im Detail

Token Filter sind die mächtigsten Werkzeuge in der Analyse-Pipeline. Hier sind einige fortgeschrittene Beispiele:

33.4.1 Synonyme verwalten

PUT /technical_docs
{
  "settings": {
    "analysis": {
      "filter": {
        "tech_synonyms": {
          "type": "synonym",
          "synonyms": [
            "laptop, notebook => computer",
            "smartphone, handy, mobiltelefon",
            "wifi, wlan => wireless"
          ]
        }
      },
      "analyzer": {
        "tech_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "tech_synonyms"
          ]
        }
      }
    }
  }
}

33.4.2 N-Grams für Autocomplete

PUT /product_search
{
  "settings": {
    "analysis": {
      "filter": {
        "product_ngrams": {
          "type": "edge_ngram",
          "min_gram": 3,
          "max_gram": 20
        }
      },
      "analyzer": {
        "product_search": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "product_ngrams"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "product_search",
        "search_analyzer": "standard"
      }
    }
  }
}

33.4.3 Phonetische Suche

PUT /customer_service
{
  "settings": {
    "analysis": {
      "filter": {
        "name_phonetic": {
          "type": "phonetic",
          "encoder": "cologne_phonetic",
          "replace": false
        }
      },
      "analyzer": {
        "name_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "name_phonetic"
          ]
        }
      }
    }
  }
}

33.5 Analyzer testen und debuggen

Die Analyse-Phase ist kritisch für die Suchqualität. Hier sind einige Techniken zum Testen und Debuggen:

33.5.1 Analyzer-Verhalten testen

POST /_analyze
{
  "analyzer": "product_analyzer",
  "text": "Der schnelle USB-C Adapter (2m) - Schwarz"
}

33.5.2 Token Filter einzeln testen

POST /_analyze
{
  "tokenizer": "standard",
  "filter": ["lowercase", "german_stemmer"],
  "text": "Die schnellen Autos fahren auf der Straße"
}

33.5.3 Analyzer-Konfiguration validieren

GET /products/_settings
GET /products/_mapping

33.6 Best Practices für Text-Analyse

  1. Analyse der Anforderungen
  2. Performance-Überlegungen
  3. Wartung und Updates