Suchen nach Daten in Amazon OpenSearch Service - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Suchen nach Daten in Amazon OpenSearch Service

Es gibt mehrere gängige Methoden für die Suche nach Dokumenten in Amazon OpenSearch Service, darunter URI Suchen und Suchen nach Anforderungstexten. OpenSearch Service bietet zusätzliche Funktionen, die das Sucherlebnis verbessern, wie z. B. benutzerdefinierte Pakete, SQL Support und asynchrone Suche. Eine umfassende OpenSearch API Suchreferenz finden Sie in der OpenSearch Dokumentation.

Anmerkung

Die folgenden Beispielanfragen funktionieren mit OpenSearch APIs. Einige Anfragen funktionieren möglicherweise nicht mit älteren Elasticsearch-Versionen.

URIsucht

Universal Resource Identifier (URI) -Suchen sind die einfachste Form der Suche. Bei einer URI Suche geben Sie die Abfrage als HTTP Anforderungsparameter an:

GET https://search-my-domain.us-west-1.es.amazonaws.com/_search?q=house

Eine Beispielantwort kann wie folgt aussehen:

{ "took": 25, "timed_out": false, "_shards": { "total": 10, "successful": 10, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 85, "relation": "eq", }, "max_score": 6.6137657, "hits": [ { "_index": "movies", "_type": "movie", "_id": "tt0077975", "_score": 6.6137657, "_source": { "directors": [ "John Landis" ], "release_date": "1978-07-27T00:00:00Z", "rating": 7.5, "genres": [ "Comedy", "Romance" ], "image_url": "http://ia.media-imdb.com/images/M/MV5BMTY2OTQxNTc1OF5BMl5BanBnXkFtZTYwNjA3NjI5._V1_SX400_.jpg", "plot": "At a 1962 College, Dean Vernon Wormer is determined to expel the entire Delta Tau Chi Fraternity, but those troublemakers have other plans for him.", "title": "Animal House", "rank": 527, "running_time_secs": 6540, "actors": [ "John Belushi", "Karen Allen", "Tom Hulce" ], "year": 1978, "id": "tt0077975" } }, ... ] } }

Standardmäßig durchsucht diese Abfrage alle Felder aller Indizes nach dem Begriff house. Um die Suche einzuschränken, geben Sie einen Index (movies) und ein Dokumentfeld (title) in den folgenden Feldern anURI:

GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house

Sie können zusätzliche Parameter in die Anfrage aufnehmen, aber die unterstützten Parameter stellen nur einen kleinen Teil der OpenSearch Suchoptionen dar. Die folgende Anfrage gibt 20 Ergebnisse (statt standardmäßig 10) zurück und sortiert nach Jahr (statt nach _score):

GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house&size=20&sort=year:desc

Anforderungstextsuchen

Um komplexere Suchen durchzuführen, verwenden Sie den HTTP Anfragetext und die OpenSearch domänenspezifische Sprache (DSL) für Abfragen. Mit der Abfrage DSL können Sie den gesamten Bereich der OpenSearch Suchoptionen angeben.

Anmerkung

Sie können keine Unicode-Sonderzeichen in einen Textfeldwert aufnehmen, andernfalls wird der Wert als mehrere durch das Sonderzeichen getrennte Werte analysiert. Diese fehlerhafte Analyse kann zu einer unbeabsichtigten Filterung von Dokumenten führen und möglicherweise die Kontrolle über deren Zugriff beeinträchtigen. Weitere Informationen finden Sie in der OpenSearch Dokumentation unter Ein Hinweis zu Unicode-Sonderzeichen in Textfeldern.

Die folgende match Abfrage ähnelt dem endgültigen URISuchbeispiel:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "sort": { "year": { "order": "desc" } }, "query": { "query_string": { "default_field": "title", "query": "house" } } }
Anmerkung

Die Suche nach dem POST Hauptteil der Anfrage wird _search API akzeptiert HTTPGET, aber nicht alle HTTP Clients unterstützen das Hinzufügen eines Anforderungstexts zu einer GET Anfrage. POSTist die allgemeinere Wahl.

In vielen Fällen möchten Sie möglicherweise mehrere Felder durchsuchen, jedoch nicht alle Felder. Verwenden Sie die multi_match-Abfrage:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title", "plot", "actors", "directors"] } } }

Boosten der Felder

Sie können die Suchrelevanz verbessern, indem Sie bestimmte Felder "boosten". Boosts sind Multiplikatoren, die Übereinstimmungen in einem Feld stärker gewichten als die in anderen Feldern. Im folgenden Beispiel beeinflusst eine Übereinstimmung für john im title-Feld _score doppelt so viel wie eine Übereinstimmung im plot-Feld und vier Mal so viel wie eine Übereinstimmung im actors- oder directors-Feld. Das Ergebnis ist, dass Filme wie John Wick und John Carter oben in den Suchergebnissen und Filme mit John Travolta unten angegeben werden.

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "john", "fields": ["title^4", "plot^2", "actors", "directors"] } } }

Hervorheben der Suchergebnisse

Die highlight Option weist OpenSearch an, dass ein zusätzliches Objekt innerhalb des hits Arrays zurückgegeben werden soll, wenn die Abfrage mit einem oder mehreren Feldern übereinstimmt:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} } } }

Wenn die Abfrage mit dem Inhalt des plot-Feldes übereinstimmt, könnte ein Treffer folgendermaßen aussehen:

{ "_index": "movies", "_type": "movie", "_id": "tt0091541", "_score": 11.276199, "_source": { "directors": [ "Richard Benjamin" ], "release_date": "1986-03-26T00:00:00Z", "rating": 6, "genres": [ "Comedy", "Music" ], "image_url": "http://ia.media-imdb.com/images/M/MV5BMTIzODEzODE2OF5BMl5BanBnXkFtZTcwNjQ3ODcyMQ@@._V1_SX400_.jpg", "plot": "A young couple struggles to repair a hopelessly dilapidated house.", "title": "The Money Pit", "rank": 4095, "running_time_secs": 5460, "actors": [ "Tom Hanks", "Shelley Long", "Alexander Godunov" ], "year": 1986, "id": "tt0091541" }, "highlight": { "plot": [ "A young couple struggles to repair a hopelessly dilapidated <em>house</em>." ] } }

Standardmäßig OpenSearch umschließt die übereinstimmende Zeichenfolge in <em> Tags, stellt bis zu 100 Zeichen Kontext für den Treffer bereit und teilt den Inhalt in Sätze auf, indem Satzzeichen, Leerzeichen, Tabulatoren und Zeilenumbrüche identifiziert werden. Alle diese Einstellungen sind konfigurierbar:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} }, "pre_tags": "<strong>", "post_tags": "</strong>", "fragment_size": 200, "boundary_chars": ".,!? " } }

Zählen API

Wenn Sie sich nicht für den Inhalt Ihrer Dokumente interessieren und nur die Anzahl der Treffer wissen möchten, können Sie den _count API anstelle von verwenden _searchAPI. Die folgende Anfrage verwendet die query_string-Abfrage zum Identifizieren romantischer Komödien:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_count { "query": { "query_string": { "default_field": "genres", "query": "romance AND comedy" } } }

Eine Beispielantwort kann wie folgt aussehen:

{ "count": 564, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 } }

Paginieren der Suchergebnisse

Wenn Sie eine große Anzahl von Suchergebnissen anzeigen müssen, können Sie die Seitennummerierung mit verschiedenen Methoden implementieren.

Zeitpunkt

Bei der PIT Point-in-Time-Funktion () handelt es sich um eine Art von Suche, mit der Sie verschiedene Abfragen für ein zeitlich festes Dataset ausführen können. Dies ist die bevorzugte Paginierungsmethode OpenSearch, insbesondere für tiefe Paginierung. Sie können es PIT mit OpenSearch Service Version 2.5 und höher verwenden. Mehr über PIT erfahren Sie unter Point-in-Time-Suche in Amazon OpenSearch Service.

Die size Parameter from und

Die einfachste Methode zum Paginieren ist die Verwendung der size Parameter from und. Die folgende Anfrage gibt Ergebnisse 20-39 der null-indizierten Liste von Suchergebnissen zurück:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "from": 20, "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } } }

Weitere Informationen zur Suchpaginierung finden Sie in der Dokumentation unter Ergebnisse paginieren. OpenSearch

Abfragesprache für Dashboards

Sie können die Dashboard-Abfragesprache (DQL) verwenden, um in Dashboards nach Daten und Visualisierungen zu suchen. OpenSearch DQLverwendet vier primäre Abfragetypen: Begriffe, Boolean, Datum und Bereich sowie verschachteltes Feld.

Begriffsabfrage

Bei einer Begriffsabfrage müssen Sie den Begriff angeben, nach dem Sie suchen.

Geben Sie zum Durchführen einer Begriffsabfrage Folgendes ein:

host:www.example.com

Boolesche Abfrage

Sie können die booleschen Operatoren AND, or und not verwenden, um mehrere Abfragen zu kombinieren.

Fügen Sie zum Durchführen einer booleschen Abfrage Folgendes ein:

host.keyword:www.example.com and response.keyword:200

Datums- und Bereichsabfragen

Sie können eine Datums- und Bereichsabfrage verwenden, um ein Datum vor oder nach Ihrer Abfrage zu finden.

  • > zeigt eine Suche nach einem Datum nach dem angegebenen Datum an.

  • < zeigt eine Suche nach einem Datum vor dem angegebenen Datum an.

@timestamp > "2020-12-14T09:35:33"

Verschachtelte Feldabfrage

Wenn Sie ein Dokument mit verschachtelten Feldern haben, müssen Sie angeben, welche Teile des Dokuments Sie abrufen möchten. Im Folgenden finden Sie ein Beispieldokument, das verschachtelte Felder enthält:

{"NBA players":[ {"player-name": "Lebron James", "player-position": "Power forward", "points-per-game": "30.3" }, {"player-name": "Kevin Durant", "player-position": "Power forward", "points-per-game": "27.1" }, {"player-name": "Anthony Davis", "player-position": "Power forward", "points-per-game": "23.2" }, {"player-name": "Giannis Antetokounmpo", "player-position": "Power forward", "points-per-game":"29.9" } ] }

Um ein bestimmtes Feld mit abzurufenDQL, fügen Sie Folgendes ein:

NBA players: {player-name: Lebron James}

Fügen Sie Folgendes ein, um mehrere Objekte aus dem verschachtelten Dokument abzurufen:

NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo}

Fügen Sie Folgendes ein, um innerhalb eines Bereichs zu suchen:

NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo and < 30}

Wenn Ihr Dokument ein Objekt enthält, das in einem anderen Objekt verschachtelt ist, können Sie dennoch Daten abrufen, indem Sie alle Ebenen angeben. Fügen Sie dazu Folgendes ein:

Top-Power-forwards.NBA players: {player-name:Lebron James}