Die Suchfunktionalität ist das Herzstück von OpenSearch. Während die Dokumenten-APIs uns ermöglichen, Daten zu speichern und zu verwalten, sind es die Such-APIs, die OpenSearch zu einem mächtigen Analyse- und Recherchewerkzeug machen. In diesem Kapitel lernen wir, wie wir von einfachen Suchanfragen bis hin zu komplexen Analysen das volle Potenzial der Such-APIs ausschöpfen können.
OpenSearch bietet vier zentrale Endpunkte für die Suche:
GET /<index>/_search # Suche in einem spezifischen Index
GET /_search # Suche über alle Indizes
POST /<index>/_search # Suche mit Request-Body in spezifischem Index
POST /_search # Suche mit Request-Body über alle Indizes
Die Wahl zwischen GET und POST hängt hauptsächlich von der Komplexität Ihrer Suchanfrage ab. Bei einfachen Suchen reicht GET, für komplexere Anfragen mit umfangreichem Request-Body ist POST die bessere Wahl.
OpenSearch bietet eine Vielzahl von Parametern, um die Suche zu steuern. Hier sind die wichtigsten:
size: Kontrolliert die Anzahl der zurückgegebenen Dokumente
GET /mein-index/_search?size=5from: Ermöglicht Pagination durch Überspringen von Ergebnissen
GET /mein-index/_search?from=10&size=5timeout: Begrenzt die Suchzeit
GET /mein-index/_search?timeout=1ssearch_type: Beeinflusst die Art der Suche
Die Parameter realtime und refresh spielen
eine wichtige Rolle für die Balance zwischen Aktualität und
Performance:
# Echtzeitsuche (kann Performance beeinträchtigen)
GET /mein-index/_search?realtime=true
# Suche nach dem letzten Refresh (bessere Performance)
GET /mein-index/_search?realtime=false
Die Query DSL (Domain Specific Language) ist das mächtigste Werkzeug für komplexe Suchen:
{
"query": {
"bool": {
"must": [
{ "match": { "titel": "OpenSearch" }},
{ "range": { "datum": { "gte": "2024-01-01" }}}
],
"must_not": [
{ "term": { "status": "entwurf" }}
],
"filter": [
{ "term": { "kategorie": "technologie" }}
]
}
}
}Die Suchperformance kann durch geschicktes Routing und Präferenzen optimiert werden:
# Suche auf bestimmten Shards
GET /mein-index/_search?preference=_shards:0,1
# Lokale Ausführung bevorzugen
GET /mein-index/_search?preference=_local
# Suche auf Primary Shards
GET /mein-index/_search?preference=_primary
OpenSearch bietet verschiedene Möglichkeiten, mit Fehlern und Teilresultaten umzugehen:
# Teilresultate erlauben
GET /mein-index/_search?allow_partial_search_results=true
# Fehlertolerante Suche
GET /mein-index/_search?lenient=true
{
"size": 0,
"aggs": {
"kategorien": {
"terms": {
"field": "kategorie",
"size": 10
}
},
"durchschnittspreis": {
"avg": {
"field": "preis"
}
}
}
}{
"aggs": {
"nach_kategorie": {
"terms": {
"field": "kategorie"
},
"aggs": {
"preis_stats": {
"stats": {
"field": "preis"
}
}
}
}
}
}Batch-Size optimieren:
{
"size": 100,
"query": {...},
"batched_reduce_size": 512
}Source-Filtering nutzen:
{
"_source": ["titel", "autor"],
"query": {...}
}Pre-Filter für große Indizes:
{
"pre_filter_shard_size": 128,
"query": {...}
}{
"track_total_hits": true,
"track_scores": true,
"explain": true,
"query": {...}
}{
"query": {
"multi_match": {
"query": "OpenSearch Suche",
"fields": ["titel^2", "beschreibung"],
"type": "best_fields",
"tie_breaker": 0.3
}
}
}{
"query": {
"match": {
"kategorie": "elektronik"
}
},
"aggs": {
"preis_bereiche": {
"range": {
"field": "preis",
"ranges": [
{ "to": 50 },
{ "from": 50, "to": 200 },
{ "from": 200 }
]
}
},
"marken": {
"terms": {
"field": "marke",
"size": 10
}
}
}
}{
"suggest": {
"text": "opensear",
"completion": {
"field": "suggest",
"fuzzy": {
"fuzziness": 2
}
}
}
}{
"explain": true,
"query": {
"match": {
"titel": "OpenSearch"
}
}
}{
"profile": true,
"query": {
"match_all": {}
}
}{
"size": 10,
"query": {...},
"search_after": [1579238451, "654321"],
"sort": [
{"datum": "desc"},
{"_id": "desc"}
]
}{
"size": 100,
"query": {...},
"sort": ["_doc"],
"scroll": "1m"
}Die Such-APIs von OpenSearch bieten ein mächtiges Werkzeug für die Datensuche und -analyse. Von einfachen Textsuchen bis hin zu komplexen Aggregationen ermöglichen sie eine flexible und skalierbare Implementierung von Suchfunktionen.
Wichtige Aspekte für den produktiven Einsatz sind:
Mit diesem Wissen können Sie die Such-APIs effektiv in Ihren Anwendungen einsetzen und das volle Potenzial von OpenSearch ausschöpfen.