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.
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:
Character Filter entfernt oder ersetzt unerwünschte Zeichen: “Der schnelle USB-C Adapter (2m) - Schwarz” → “Der schnelle USB C Adapter 2m Schwarz”
Tokenizer zerlegt den Text in einzelne Token: [“Der”, “schnelle”, “USB”, “C”, “Adapter”, “2m”, “Schwarz”]
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"
}
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:
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.
Der Standard Tokenizer zerlegt den Text intelligent in Token. Er erkennt Wortgrenzen und behandelt auch Zahlen und Sonderzeichen korrekt.
Die Token Filter führen wichtige Normalisierungen durch:
Verschiedene Textarten benötigen verschiedene Analysestrategien. Hier sind einige spezialisierte Analyzer für typische Anwendungsfälle:
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:
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:
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:
Token Filter sind die mächtigsten Werkzeuge in der Analyse-Pipeline. Hier sind einige fortgeschrittene Beispiele:
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"
]
}
}
}
}
}
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"
}
}
}
}
PUT /customer_service
{
"settings": {
"analysis": {
"filter": {
"name_phonetic": {
"type": "phonetic",
"encoder": "cologne_phonetic",
"replace": false
}
},
"analyzer": {
"name_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"name_phonetic"
]
}
}
}
}
}
Die Analyse-Phase ist kritisch für die Suchqualität. Hier sind einige Techniken zum Testen und Debuggen:
POST /_analyze
{
"analyzer": "product_analyzer",
"text": "Der schnelle USB-C Adapter (2m) - Schwarz"
}
POST /_analyze
{
"tokenizer": "standard",
"filter": ["lowercase", "german_stemmer"],
"text": "Die schnellen Autos fahren auf der Straße"
}
GET /products/_settings
GET /products/_mapping