Interroger un index - Amazon Kendra

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.

Interroger un index

Lorsque vous effectuez une recherche dans votre index, il Amazon Kendra utilise toutes les informations que vous avez fournies sur vos documents pour déterminer les documents les plus pertinents par rapport aux termes de recherche saisis. Certains des éléments pris en Amazon Kendra compte sont les suivants :

  • Le texte ou le corps du document.

  • Titre du document.

  • Champs de texte personnalisés que vous avez marqués comme consultables.

  • Le champ de date que vous avez indiqué doit être utilisé pour déterminer la « fraîcheur » d'un document.

  • Tout autre champ susceptible de fournir des informations pertinentes.

Amazon Kendra peut également filtrer la réponse en fonction des filtres de champ/d'attribut que vous pourriez avoir définis pour la recherche. Par exemple, si vous avez un champ personnalisé appelé « département », vous pouvez filtrer la réponse pour ne renvoyer que les documents provenant d'un département appelé « juridique ». Pour plus d'informations, consultez la section Champs ou attributs personnalisés.

Les résultats de recherche renvoyés sont triés en fonction de la pertinence qui Amazon Kendra détermine chaque document. Les résultats sont paginés afin que vous puissiez montrer une page à la fois à votre utilisateur.

Pour rechercher des documents que vous avez indexés avec Amazon Kendra for Amazon Lex, utilisez AMAZON. KendraSearchIntent. Pour un exemple de configuration Amazon Kendra avec Amazon Lex, voir Création d'un bot FAQ pour un Amazon Kendra index.

L'exemple suivant montre comment effectuer une recherche dans un index. Amazon Kendra détermine le type de résultat de recherche (réponse, document, question-réponse) le mieux adapté à la requête. Vous ne pouvez pas configurer Amazon Kendra pour renvoyer un type spécifique de réponse de recherche (réponse, document, question-réponse) à une requête.

Pour plus d'informations sur les réponses aux requêtes, consultezRéponses aux requêtes et types de réponses.

Prérequis

Avant d'utiliser l'API Query pour interroger un index :

  • Configurez les autorisations requises pour un index et connectez-vous à votre source de données ou téléchargez vos documents par lots. Pour plus d'informations, consultez la section IAM Rôles. Vous utilisez le nom de ressource Amazon du rôle lorsque vous appelez l'API pour créer un index et un connecteur de source de données ou pour télécharger des documents par lots.

  • Configurez un SDK ou accédez à la Amazon Kendra console. AWS Command Line Interface Pour plus d’informations, consultez Configuration de Amazon Kendra.

  • Créez un index et connectez-vous à une source de données de documents ou téléchargez des documents par lots. Pour plus d'informations, consultez les sections Création d'un index et Création d'un connecteur de source de données.

Recherche dans un index (console)

Vous pouvez utiliser la Amazon Kendra console pour rechercher et tester votre index. Vous pouvez effectuer des requêtes et voir les résultats.

Pour rechercher un index à l'aide de la console
  1. Connectez-vous à la Amazon Kendra console AWS Management Console et ouvrez-la à l'adresse http://console.aws.amazon.com/kendra/.

  2. Dans le volet de navigation, sélectionnez Indexes.

  3. Choisissez votre index.

  4. Dans le menu de navigation, choisissez l'option permettant de rechercher dans votre index.

  5. Entrez une requête dans la zone de texte, puis appuyez sur Entrée.

  6. Amazon Kendra renvoie les résultats de la recherche.

Vous pouvez également obtenir l'ID de requête pour la recherche en sélectionnant l'icône représentant une ampoule dans le panneau latéral.

Recherche dans un index (SDK)

Pour rechercher un index avec Python ou Java
  • L'exemple suivant effectue une recherche dans un index. Modifiez la valeur query de votre requête de recherche index_id et/ou indexId de l'identifiant d'index de l'index que vous souhaitez rechercher.

    Vous pouvez également obtenir l'ID de requête pour la recherche dans le cadre des éléments de réponse lorsque vous appelez l'API Query.

    Python
    import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the query text query = "query text" response = kendra.query( QueryText = query, IndexId = index_id) print("\nSearch results for query: " + query + "\n") for query_result in response["ResultItems"]: print("-------------------") print("Type: " + str(query_result["Type"])) if query_result["Type"]=="ANSWER" or query_result["Type"]=="QUESTION_ANSWER": answer_text = query_result["DocumentExcerpt"]["Text"] print(answer_text) if query_result["Type"]=="DOCUMENT": if "DocumentTitle" in query_result: document_title = query_result["DocumentTitle"]["Text"] print("Title: " + document_title) document_text = query_result["DocumentExcerpt"]["Text"] print(document_text) print("------------------\n\n")
    Java
    package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.QueryRequest; import software.amazon.awssdk.services.kendra.model.QueryResponse; import software.amazon.awssdk.services.kendra.model.QueryResultItem; public class SearchIndexExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String query = "query text"; String indexId = "index-id"; QueryRequest queryRequest = QueryRequest .builder() .queryText(query) .indexId(indexId) .build(); QueryResponse queryResponse = kendra.query(queryRequest); System.out.println(String.format("\nSearch results for query: %s", query)); for(QueryResultItem item: queryResponse.resultItems()) { System.out.println("----------------------"); System.out.println(String.format("Type: %s", item.type())); switch(item.type()) { case QUESTION_ANSWER: case ANSWER: String answerText = item.documentExcerpt().text(); System.out.println(answerText); break; case DOCUMENT: String documentTitle = item.documentTitle().text(); System.out.println(String.format("Title: %s", documentTitle)); String documentExcerpt = item.documentExcerpt().text(); System.out.println(String.format("Excerpt: %s", documentExcerpt)); break; default: System.out.println(String.format("Unknown query result type: %s", item.type())); } System.out.println("-----------------------\n"); } } }

Recherche dans un index (Postman)

Vous pouvez utiliser Postman pour interroger et tester votre Amazon Kendra index.

Pour effectuer une recherche dans un index à l'aide de Postman
  1. Créez une nouvelle collection dans Postman et définissez le type de demande sur POST.

  2. Entrez l'URL du point de terminaison. Par exemple, https://kendra. .amazonaws.com. <region>

  3. Sélectionnez l'onglet Autorisation et entrez les informations suivantes.

    • Type —Sélectionnez une AWS signature.

    • AccessKey—Entrez la clé d'accès générée lors de la création d'un IAM utilisateur.

    • SecretKey—Entrez la clé secrète générée lors de la création d'un IAM utilisateur.

    • AWS Région —Entrez la région de votre index. Par exemple, us-west-2.

    • Nom du service —Entrez kendra. Ceci distingue les majuscules et minuscules, donc ce doit être fait en minuscules.

      Avertissement

      Si vous entrez un nom de service incorrect ou si vous n'utilisez pas de minuscules, une erreur est générée lorsque vous sélectionnez Envoyer pour envoyer la demande : « Les informations d'identification doivent être limitées au bon service « kendra ». »

      Vous devez également vérifier que vous avez saisi la bonne clé d'accès et la bonne clé secrète.

  4. Sélectionnez l'onglet En-têtes et entrez les informations de clé et de valeur suivantes.

    • Clé : X-Amz-Target

      Valeur : com.amazonaws.kendra. AWSKendraFrontendService.Requête

    • Clé : Encodage du contenu

      Valeur : amz-1.0

  5. Sélectionnez l'onglet Body et procédez comme suit.

    • Choisissez le type JSON brut pour le corps de la demande.

    • Entrez un JSON qui inclut votre identifiant d'index et le texte de votre requête.

      { "IndexId": "index-id", "QueryText": "enter a query here" }
      Avertissement

      Si votre JSON n'utilise pas l'indendation correcte, une erreur est renvoyée : « »SerializationException. Vérifiez l'indendation dans votre JSON.

  6. Sélectionnez Envoyer (en haut à droite).

Recherche à l'aide d'une syntaxe de requête avancée

Vous pouvez créer des requêtes plus spécifiques que de simples requêtes par mots clés ou en langage naturel en utilisant une syntaxe ou des opérateurs de requête avancés. Cela inclut les plages, les booléens, les caractères génériques, etc. En utilisant des opérateurs, vous pouvez donner plus de contexte à votre requête et affiner les résultats de recherche.

Amazon Kendra prend en charge les opérateurs suivants.

  • Booléen : logique permettant de limiter ou d'élargir la recherche. Par exemple, amazon AND sports limite la recherche aux seuls documents contenant les deux termes.

  • Parenthèses : lit les termes de requête imbriqués par ordre de priorité. Par exemple, (amazon AND sports) NOT rainforest lit (amazon AND sports) avantNOT rainforest.

  • Plages : dates ou valeurs de plage numériques. Les plages peuvent être inclusives, exclusives ou illimitées. Par exemple, vous pouvez rechercher des documents qui ont été mis à jour pour la dernière fois entre le 1er janvier 2020 et le 31 décembre 2020, y compris ces dates.

  • Champs : Utilise un champ spécifique pour limiter la recherche. Par exemple, vous pouvez rechercher des documents dont le champ « localisation » contient « États-Unis ».

  • Caractères génériques : correspondent partiellement à une chaîne de texte. Par exemple, Cloud* pourrait correspondre CloudFormation. Amazon Kendra ne prend actuellement en charge que les caractères génériques de fin.

  • Guillemets exacts : correspondent exactement à une chaîne de texte. Par exemple, les documents contenant"Amazon Kendra" "pricing".

Vous pouvez utiliser une combinaison de n'importe lequel des opérateurs ci-dessus.

Notez qu'une utilisation excessive d'opérateurs ou des requêtes très complexes peuvent avoir un impact sur la latence des requêtes. Les Wildcards font partie des opérateurs les plus chers en termes de latence. En règle générale, plus vous utilisez de termes et d'opérateurs, plus l'impact potentiel sur la latence est important. Parmi les autres facteurs qui influent sur la latence, citons la taille moyenne des documents indexés, la taille de votre index, les éventuels filtres appliqués aux résultats de recherche et la charge globale de votre Amazon Kendra index.

Booléen

Vous pouvez combiner ou exclure des mots à l'aide des opérateurs booléensAND,,OR. NOT

Voici des exemples d'utilisation d'opérateurs booléens.

amazon AND sports

Renvoie les résultats de recherche qui contiennent à la fois les termes « amazon » et « sports » dans le texte, tels que Amazon Prime Video Sports ou tout autre contenu similaire.

sports OR recreation

Renvoie les résultats de recherche qui contiennent les termes « sports » ou « loisirs », ou les deux, dans le texte.

amazon NOT rainforest

Renvoie les résultats de recherche qui contiennent le terme « amazone » mais pas le terme « forêt tropicale » dans le texte. Il s'agit de rechercher des documents sur l'entreprise Amazon, et non sur la forêt amazonienne.

Parenthèses

Vous pouvez interroger les mots imbriqués par ordre de priorité en utilisant des parenthèses. Les parenthèses indiquent Amazon Kendra comment une requête doit être lue.

Voici des exemples d'utilisation d'opérateurs entre parenthèses.

(amazon AND sports) NOT rainforest

Renvoie les documents qui contiennent à la fois les termes « amazon » et « sports » dans le texte, mais pas le terme « forêt tropicale ». Il s'agit de rechercher des vidéos sur Amazon Prime, des sports ou d'autres contenus similaires, et non des sports d'aventure dans la forêt amazonienne. Les parenthèses aident à indiquer que cela amazon AND sports doit être lu avantNOT rainforest. La requête ne doit pas être lue comme telleamazon AND (sports NOT rainforest).

(amazon AND (sports OR recreation)) NOT rainforest

Renvoie les documents contenant les termes « sport » ou « loisirs », ou les deux, et le terme « Amazon ». Mais le terme « forêt tropicale » n'y figure pas. Il s'agit de rechercher des vidéos sportives ou récréatives sur Amazon Prime, et non des sports d'aventure dans la forêt amazonienne. Les parenthèses indiquent qu'il sports OR recreation faut le lire avant de le combiner avec « amazon », qui est lu avantNOT rainforest. La requête ne doit pas être lue comme telleamazon AND (sports OR (recreation NOT rainforest)).

Gammes

Vous pouvez utiliser une plage de valeurs pour filtrer les résultats de recherche. Vous spécifiez un attribut et les valeurs de plage. Il peut s'agir d'une date ou d'un type numérique.

Les plages de dates doivent respecter les formats suivants :

  • Epoch

  • YYYY

  • YYYY-mm

  • YYYY-MM-DD

  • YYYY-MM-DD'T'HH

Vous pouvez également spécifier s'il faut inclure ou exclure les valeurs inférieures et supérieures de la plage.

Vous trouverez ci-dessous des exemples d'utilisation des opérateurs de plage.

_processed_date:>2019-12-31 AND _processed_date:<2021-01-01

Renvoie les documents qui ont été traités en 2020, plus tard que le 31 décembre 2019 et moins que le 1er janvier 2021.

_processed_date:>=2020-01-01 AND _processed_date:<=2020-12-31

Renvoie les documents traités en 2020, supérieurs ou égaux au 1er janvier 2020 et inférieurs ou égaux au 31 décembre 2020.

_document_likes:<1

Renvoie les documents n'ayant reçu aucun « j'aime » ou aucun commentaire de la part de l'utilisateur, c'est-à-dire moins d'un « j'aime ».

Vous pouvez spécifier si une plage doit être traitée comme incluant ou excluant les valeurs de plage données.

Inclusif

_last_updated_at:[2020-01-01 TO 2020-12-31]

Les documents de retour ont été mis à jour pour la dernière fois en 2020, y compris les jours du 1er décembre 2020 et du 31 décembre 2020.

Exclusif

_last_updated_at:{2019-12-31 TO 2021-01-01}

Les documents de retour ont été mis à jour pour la dernière fois en 2020, à l'exception des jours du 31 décembre 2019 et du 1er janvier 2021.

< and >Pour les plages illimitées qui ne sont ni inclusives ni exclusives, utilisez simplement les opérateurs. Par exemple, _last_updated_at:>2019-12-31 AND _last_updated_at:<2021-01-01

Champs

Vous pouvez limiter votre recherche pour ne renvoyer que les documents correspondant à une valeur dans un champ spécifique. Le champ peut être de n'importe quel type.

Vous trouverez ci-dessous des exemples d'utilisation d'opérateurs de contexte au niveau du champ.

status:"Incomplete" AND financial_year:2021

Renvoie les documents de l'exercice 2021 avec leur statut incomplet.

(sports OR recreation) AND country:"United States" AND level:"professional"

Renvoie les documents qui traitent des sports professionnels ou des loisirs aux États-Unis.

Caractères génériques

Vous pouvez élargir votre recherche pour prendre en compte les variantes de mots et d'expressions à l'aide de l'opérateur générique. Cela est utile lors de la recherche de variantes de noms. Amazon Kendra ne prend actuellement en charge que les caractères génériques de fin. Le nombre de caractères de préfixe pour un caractère générique final doit être supérieur à deux.

Vous trouverez ci-dessous des exemples d'utilisation d'opérateurs génériques.

Cloud*

Renvoie les documents contenant des variantes telles que CloudFormation et CloudWatch.

kendra*aws

Renvoie les documents contenant des variantes telles que kendra.amazonaws.

kendra*aws*

Renvoie les documents contenant des variantes, tels que kendra.amazonaws.com

Citations exactes

Vous pouvez utiliser des guillemets pour rechercher une correspondance exacte entre un texte.

Voici des exemples d'utilisation de guillemets.

"Amazon Kendra" "pricing"

Renvoie les documents contenant à la fois l'expression « Amazon Kendra » et le terme « tarification ». Les documents doivent contenir à la fois des Amazon Kendra« » et des « prix » pour que les résultats puissent être renvoyés.

"Amazon Kendra" "pricing" cost

Renvoie les documents contenant à la fois l'expression « Amazon Kendra » et le terme « tarification », et éventuellement le terme « coût ». Les documents doivent contenir à la fois le terme « Amazon Kendra » et le « prix » afin de fournir les résultats, mais ils ne doivent pas nécessairement inclure le « coût ».

Syntaxe de requête non valide

Amazon Kendra émet un avertissement en cas de problème de syntaxe de votre requête ou si votre requête n'est actuellement pas prise en charge par Amazon Kendra. Pour plus d'informations, consultez la documentation de l'API pour les avertissements relatifs aux requêtes.

Les requêtes suivantes sont des exemples de syntaxe de requête non valide.

_last_updated_at:<2021-12-32

Date non valide. Le jour 32 n'existe pas dans le calendrier grégorien, qui est utilisé par Amazon Kendra.

_view_count:ten

Valeur numérique non valide. Les chiffres doivent être utilisés pour représenter des valeurs numériques.

nonExistentField:123

Recherche par champ non valide. Le champ doit exister pour pouvoir utiliser la recherche par champ.

Product:[A TO D]

Plage non valide. Des valeurs numériques ou des dates doivent être utilisées pour les plages.

OR Hello

Booléen non valide. Les opérateurs doivent être utilisés avec des termes et placés entre les termes.

Recherche dans les langues

Vous pouvez rechercher des documents dans une langue prise en charge. Vous devez saisir le code de langue AttributeFilterpour renvoyer les documents filtrés dans la langue de votre choix. Vous pouvez saisir la requête dans une langue prise en charge.

Si vous ne spécifiez aucune langue, Amazon Kendra interroge les documents en anglais par défaut. Pour plus d'informations sur les langues prises en charge, y compris leurs codes, voir Ajout de documents dans des langues autres que l'anglais.

Pour rechercher des documents dans une langue prise en charge dans la console, sélectionnez votre index, puis sélectionnez l'option permettant de rechercher dans votre index dans le menu de navigation. Choisissez la langue dans laquelle vous souhaitez renvoyer les documents en sélectionnant les paramètres de recherche, puis en sélectionnant une langue dans le menu déroulant Langue.

Les exemples suivants montrent comment rechercher des documents en espagnol.

Pour rechercher un index en espagnol dans la console
  1. Connectez-vous à la Amazon Kendra console AWS Management Console et ouvrez-la à l'adresse http://console.aws.amazon.com/kendra/.

  2. Dans le menu de navigation, choisissez Index et choisissez votre index.

  3. Dans le menu de navigation, choisissez l'option permettant de rechercher dans votre index.

  4. Dans les paramètres de recherche, sélectionnez le menu déroulant Langues et choisissez Espagnol.

  5. Entrez une requête dans la zone de texte, puis appuyez sur Entrée.

  6. Amazon Kendra renvoie les résultats de la recherche en espagnol.

Pour rechercher un index en espagnol à l'aide de la CLI, de Python ou de Java
  • L'exemple suivant recherche un index en espagnol. Modifiez la valeur searchString de votre requête de recherche et la valeur indexID de l'identifiant de l'index que vous souhaitez rechercher. Le code de langue pour l'espagnol estes. Vous pouvez le remplacer par votre propre code de langue.

    CLI
    { "EqualsTo":{ "Key": "_language_code", "Value": { "StringValue": "es" } } }
    Python
    import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the query text query = "search-string" # Includes the index ID, query text, and language attribute filter response = kendra.query( QueryText = query, IndexId = index_id, AttributeFilter = { "EqualsTo": { "Key": "_language_code", "Value": { "StringValue": "es" } } }) print ("\nSearch results|Resultados de la búsqueda: " + query + "\n") for query_result in response["ResultItems"]: print("-------------------") print("Type: " + str(query_result["Type"])) if query_result["Type"]=="ANSWER" or query_result["Type"]=="QUESTION_ANSWER": answer_text = query_result["DocumentExcerpt"]["Text"] print(answer_text) if query_result["Type"]=="DOCUMENT": if "DocumentTitle" in query_result: document_title = query_result["DocumentTitle"]["Text"] print("Title: " + document_title) document_text = query_result["DocumentExcerpt"]["Text"] print(document_text) print("------------------\n\n")
    Java
    package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.QueryRequest; import software.amazon.awssdk.services.kendra.model.QueryResponse; import software.amazon.awssdk.services.kendra.model.QueryResultItem; public class SearchIndexExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String query = "searchString"; String indexId = "indexID"; QueryRequest queryRequest = QueryRequest.builder() .queryText(query) .indexId(indexId) .attributeFilter( AttributeFilter.builder() .withEqualsTo( DocumentAttribute.builder() .withKey("_language_code") .withValue("es") .build()) .build()) .build(); QueryResponse queryResponse = kendra.query(queryRequest); System.out.println(String.format("\nSearch results| Resultados de la búsqueda: %s", query)); for(QueryResultItem item: queryResponse.resultItems()) { System.out.println("----------------------"); System.out.println(String.format("Type: %s", item.type())); switch(item.type()) { case QUESTION_ANSWER: case ANSWER: String answerText = item.documentExcerpt().text(); System.out.println(answerText); break; case DOCUMENT: String documentTitle = item.documentTitle().text(); System.out.println(String.format("Title: %s", documentTitle)); String documentExcerpt = item.documentExcerpt().text(); System.out.println(String.format("Excerpt: %s", documentExcerpt)); break; default: System.out.println(String.format("Unknown query result type: %s", item.type())); } System.out.println("-----------------------\n"); } } }