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 Der Service bietet zusätzliche Funktionen, die das Sucherlebnis verbessern, wie z. B. benutzerdefinierte Pakete, SQL-Unterstützung und asynchrone Suche. Eine umfassende OpenSearch Such-API-Referenz finden Sie in der OpenSearch Dokumentation.

Anmerkung

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

URI-Suchanfragen

Universal Resource Identifier (URI)-Suchanfragen sind die einfachste Form der Suche. Sie geben in einer URI-Suchanfrage die Abfrage als einen HTTP-Anfrageparameter 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. Wenn Sie die Suche einschränken möchten, geben Sie einen Index- (movies) und ein Dokumentfeld (title) in der URI an:

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 Hauptteil der HTTP-Anfrage und die OpenSearch domänenspezifische Sprache (DSL) für Abfragen. Mit der Abfrage DSL können Sie den gesamten Bereich der Suchoptionen angeben. OpenSearch

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 ist ähnlich wie das endgültige URI-Suchanfragen-Beispiel:

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 _search-API akzeptiert HTTP GET und POST für Anforderungstextsuchen, jedoch nicht alle HTTP-Clients unterstützen das Hinzufügen eines Anforderungstexts zu einer GET-Anforderung. POST ist die universellere 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": ".,!? " } }

Count-API

Wenn Sie nicht am Inhalt Ihrer Dokumente interessiert sind und einfach nur die Anzahl der Übereinstimmungen wissen möchten, können Sie die _count-API anstelle der _search-API verwenden. 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 Paginierung mit verschiedenen Methoden implementieren.

Zeitpunkt

Die Point-in-Time-Funktion (PIT) ist eine Art von Suche, mit der Sie verschiedene Abfragen für einen Datensatz ausführen können, der zeitlich festgelegt ist. Dies ist die bevorzugte Paginierungsmethode OpenSearch, insbesondere für tiefe Paginierung. Sie können PIT mit OpenSearch Service Version 2.5 und höher verwenden. Weitere Informationen zu PIT finden Sie unterPoint-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 Dashboards Query Language (DQL) verwenden, um in Dashboards nach Daten und Visualisierungen zu suchen. OpenSearch DQL verwendet vier primäre Abfragetypen: Begriffe, boolesch, Datum und Bereich und 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" } ] }

Fügen Sie Folgendes ein, um ein bestimmtes Feld mit DQL abzurufen:

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}