Recherche de données dans Amazon OpenSearch Service - Amazon OpenSearch Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Recherche de données dans Amazon OpenSearch Service

Il existe plusieurs méthodes courantes pour rechercher des documents dans Amazon OpenSearch Service, notamment les URI recherches et les recherches dans le corps des requêtes. OpenSearch Le service offre des fonctionnalités supplémentaires qui améliorent l'expérience de recherche, telles que les packages personnalisés, le SQL support et la recherche asynchrone. Pour une API référence OpenSearch de recherche complète, consultez la OpenSearch documentation.

Note

Les exemples de requêtes suivants fonctionnent avec OpenSearch APIs. Certaines demandes peuvent ne pas fonctionner avec des versions antérieures d'Elasticsearch.

URIrecherches

Les recherches par identificateur de ressource universel (URI) constituent la forme de recherche la plus simple. Lors d'une URI recherche, vous spécifiez la requête en tant que paramètre de HTTP demande :

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

Un exemple de réponse peut ressembler à ce qui suit :

{ "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" } }, ... ] } }

Par défaut, cette requête recherche le mot house dans tous les champs de tous les index. Pour affiner la recherche, spécifiez un index (movies) et un champ de document (title) dans URI :

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

Vous pouvez inclure des paramètres supplémentaires dans la demande, mais les paramètres pris en charge ne fournissent qu'un petit sous-ensemble des options de OpenSearch recherche. La demande suivante renvoie 20 résultats (au lieu de la valeur par défaut de 10) et trie les résultats par année (plutôt que par _score) :

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

Recherches dans le corps de la demande

Pour effectuer des recherches plus complexes, utilisez le corps de la HTTP requête et le langage OpenSearch spécifique au domaine (DSL) pour les requêtes. La requête vous DSL permet de définir la gamme complète des options de OpenSearch recherche.

Note

Vous ne pouvez pas inclure de caractères spéciaux Unicode dans la valeur d'un champ de texte, sinon la valeur sera analysée sous la forme de plusieurs valeurs séparées par le caractère spécial. Cette analyse incorrecte peut entraîner un filtrage involontaire des documents et potentiellement compromettre le contrôle de leur accès. Pour plus d'informations, consultez la section Remarque sur les caractères spéciaux Unicode dans les champs de texte de la OpenSearch documentation.

La match requête suivante est similaire à l'exemple URIde recherche final :

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" } } }
Note

Les recherches dans le corps POST des demandes HTTP GET et des _search API acceptations, mais tous les HTTP clients ne sont pas favorables à l'ajout d'un corps de demande à une GET demande. POSTest le choix le plus universel.

Dans de nombreux cas, il se peut que vous vouliez effectuer une recherche dans plusieurs champs, mais pas dans tous. Utilisez la requête multi_match :

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"] } } }

Optimisation des champs

Vous pouvez améliorer la pertinence des recherches en « optimisant » certains champs à l'aide de multiplicateurs qui affectent plus de poids aux correspondances se trouvant dans un champ qu'à celles se trouvant dans d'autres champs. Dans l'exemple suivant, une correspondance pour john dans le champ title influence _score deux fois plus qu'une correspondance dans le champ plot et quatre fois plus qu'une correspondance dans les champs actors ou directors. Résultat : des films tels que John Wick et John Carter figurent dans les premiers résultats de recherche, tandis que des films avec John Travolta figurent dans les derniers résultats.

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"] } } }

Mise en évidence des résultats de recherche

L'highlightoption indique OpenSearch de renvoyer un objet supplémentaire à l'intérieur du hits tableau si la requête correspond à un ou plusieurs champs :

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": {} } } }

Si la requête correspond au contenu du champ plot, le résultat peut ressembler à ce qui suit :

{ "_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>." ] } }

Par défaut, OpenSearch place la chaîne correspondante dans des <em> balises, fournit jusqu'à 100 caractères de contexte autour de la correspondance et divise le contenu en phrases en identifiant les signes de ponctuation, les espaces, les tabulations et les sauts de ligne. Tous ces paramètres sont personnalisables :

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": ".,!? " } }

Compter API

Si le contenu de vos documents ne vous intéresse pas et que vous souhaitez simplement connaître le nombre de correspondances, vous pouvez utiliser le _count API au lieu du _searchAPI. La demande suivante utilise la requête query_string pour identifier les comédies romantiques :

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

Un exemple de réponse peut ressembler à ce qui suit :

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

Pagination des résultats de recherche

Si vous devez afficher un grand nombre de résultats de recherche, vous pouvez implémenter la pagination en utilisant différentes méthodes.

Point dans le temps

La fonctionnalité point in time (PIT) est un type de recherche qui vous permet d'exécuter différentes requêtes sur un ensemble de données fixe dans le temps. Il s'agit de la méthode de pagination préférée OpenSearch, en particulier pour la pagination profonde. Vous pouvez l'utiliser PIT avec la version 2.5 du OpenSearch Service et les versions ultérieures. Pour plus d'informations sur PIT, consultez Recherche ponctuelle dans le temps dans Amazon OpenSearch Service.

Les size paramètres from et

Le moyen le plus simple de paginer est d'utiliser les size paramètres from et. La demande suivante renvoie les résultats 20 à 39 de la liste des résultats de recherche indexée sur zéro :

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"] } } }

Pour plus d'informations sur la pagination de recherche, voir Paginer les résultats dans la OpenSearch documentation.

Langage de requête Dashboards

Vous pouvez utiliser le langage de requête des tableaux de bord (DQL) pour rechercher des données et des visualisations dans OpenSearch les tableaux de bord. DQLutilise quatre types de requêtes principaux : termes, booléens, date et plage, et champ imbriqué.

Requête de termes

Une requête de termes nécessite que vous spécifiiez le terme que vous recherchez.

Pour effectuer une requête de termes, saisissez ce qui suit :

host:www.example.com

Requête booléenne

Vous pouvez utiliser les opérateurs booléens AND, or, et not pour combiner plusieurs requêtes.

Pour effectuer une requête booléenne, collez ce qui suit :

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

Requête de date et plage

Vous pouvez utiliser une requête de date et plage pour trouver une date avant ou après votre requête.

  • > indique une recherche d'une date postérieure à la date spécifiée.

  • < indique une recherche d'une date antérieure à la date spécifiée.

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

Requête de champ imbriqué

Si vous avez un document avec des champs imbriqués, vous devez spécifier les parties du document que vous voulez récupérer. Voici un exemple de document qui contient des champs imbriqués :

{"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" } ] }

Pour récupérer un champ spécifique à l'aide deDQL, collez ce qui suit :

NBA players: {player-name: Lebron James}

Pour récupérer plusieurs objets du document imbriqué, collez ce qui suit :

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

Pour effectuer une recherche dans une plage, collez ce qui suit :

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

Si votre document comporte un objet imbriqué dans un autre objet, vous pouvez toujours récupérer les données en spécifiant tous les niveaux. Pour ce faire, collez ce qui suit :

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