Consulta de un índice - Amazon Kendra

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Consulta de un índice

Cuando busca en su índice, Amazon Kendra utiliza toda la información que ha proporcionado sobre sus documentos para determinar los documentos más relevantes para los términos de búsqueda introducidos. Algunos de los elementos que se tienen Amazon Kendra en cuenta son:

  • El texto o el cuerpo del documento.

  • El título del documento.

  • Campos de texto personalizados que ha marcado como que se pueden buscar.

  • El campo de fecha que ha indicado que debe usarse para determinar la “antigüedad” de un documento.

  • Cualquier otro campo que pueda proporcionar información relevante.

Amazon Kendra también puede filtrar la respuesta en función de cualquier filtro de campo o atributo que haya establecido para la búsqueda. Por ejemplo, si tiene un campo personalizado denominado “department”, puede filtrar la respuesta para que muestre únicamente los documentos de un departamento denominado “legal”. Para obtener más información, consulte Campos o atributos personalizados.

Los resultados de la búsqueda devueltos se ordenan según la relevancia que se Amazon Kendra determine para cada documento. Los resultados están paginados para que pueda mostrar una página a la vez al usuario.

Para buscar documentos con Amazon Kendra los que ha indexado Amazon Lex, utilice AMAZON. KendraSearchIntent. Para ver un ejemplo de configuración Amazon Kendra con Amazon Lex, consulte Creación de un bot de preguntas frecuentes para un Amazon Kendra índice.

El siguiente ejemplo muestra cómo buscar en un índice. Amazon Kendra determina el tipo de resultado de la búsqueda (respuesta, documento, pregunta-respuesta) que mejor se adapta a la consulta. No se puede configurar Amazon Kendra para que devuelva un tipo específico de respuesta de búsqueda (respuesta, documento, pregunta-respuesta) a una consulta.

Para obtener más información acerca de las respuestas a las consultas, vea Respuestas a las consultas y tipos de respuestas.

Requisitos previos

Antes de usar la API de consulta para consultar un índice:

  • Configure los permisos necesarios para un índice y conéctese a su origen de datos o cargue sus documentos por lotes. Para obtener más información, consulte Roles de IAM. Debe utilizar el nombre de recursos de Amazon del rol cuando llama a la API para crear un conector de índice y origen de datos o para cargar documentos por lotes.

  • Configura un SDK o ve a la Amazon Kendra consola. AWS Command Line Interface Para más información, consulte Configuración Amazon Kendra.

  • Cree un índice y conéctese a un origen de datos de documentos o cargue documentos por lotes. Para obtener más información, consulte Creación de un índice y Creación de un conector de origen de datos.

Buscar en un índice (consola)

Puedes usar la Amazon Kendra consola para buscar y probar tu índice. Puede realizar consultas y ver los resultados.

Para buscar en un índice con la consola
  1. Inicie sesión en la Amazon Kendra consola AWS Management Console y ábrala en http://console.aws.amazon.com/kendra/.

  2. En el panel de navegación, elija Índices.

  3. Elija su índice.

  4. En el menú de navegación, elija la opción para buscar en el índice.

  5. Escriba una consulta en el cuadro de texto y, a continuación, pulse Intro.

  6. Amazon Kendra devuelve los resultados de la búsqueda.

También puede obtener el ID de consulta para la búsqueda seleccionando el icono de la bombilla en el panel lateral.

Buscar en un índice (SDK)

Para buscar en un índice con Python o Java
  • En el siguiente ejemplo se busca en un índice. Cambie el valor de query a su consulta de búsqueda y index_id o indexId al identificador de índice del índice en el que desee buscar.

    También puede obtener el ID de consulta de la búsqueda como parte de los elementos de respuesta cuando llama a la API de consulta.

    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"); } } }

Buscar en un índice (Postman)

Puede usar Postman para consultar y probar su Amazon Kendra índice.

Para buscar en un índice mediante Postman
  1. Cree una nueva colección en Postman y establezca el tipo de solicitud en POST.

  2. Introduzca la URL del punto de conexión. Por ejemplo, https://kendra.<region>.amazonaws.com.

  3. Seleccione la pestaña Autorización e introduzca la siguiente información.

    • Tipo: seleccione la firma de AWS .

    • AccessKey—Introduzca la clave de acceso generada al crear un IAM usuario.

    • SecretKey—Introduzca la clave secreta generada al crear un IAM usuario.

    • AWS Región: introduzca la región de su índice. Por ejemplo, us-west-2.

    • Nombre del servicio: introduzca kendra. Se distingue entre mayúsculas y minúsculas, por lo que debe estar en minúsculas.

      aviso

      Si escribe un nombre de servicio incorrecto o no utiliza minúsculas, aparecerá un mensaje de error al seleccionar Enviar para enviar la solicitud: “Credential should be scoped to the correct service 'kendra'’”.

      También debe comprobar que ha introducido la clave de acceso y la clave secreta.

  4. Seleccione la pestaña Encabezados e introduzca la siguiente información de clave y valor.

    • Clave: X-Amz-Target

      Valor: com.amazonaws.kendra. AWSKendraFrontendService.Consulta

    • Clave: Content-Encoding

      Valor: amz-1.0

  5. Seleccione la pestaña Cuerpo y haga lo siguiente.

    • Elija el tipo JSON sin procesar para el cuerpo de la solicitud.

    • Introduzca un JSON que incluya su ID de índice y el texto de la consulta.

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

      Si tu JSON no usa la indentación correcta, aparece un error: "». SerializationException Compruebe la indentación en su JSON.

  6. Seleccione Enviar (cerca de la esquina superior derecha).

Búsqueda con una sintaxis de consulta avanzada

Puede crear consultas que sean más específicas que las consultas simples de palabras clave o lenguaje natural mediante operadores o sintaxis de consulta avanzados. Por ejemplo, puede utilizar rangos, operadores booleanos, caracteres comodín y mucho más. Al usar operadores, puede dar más contexto a la consulta y refinar aún más los resultados de búsqueda.

Amazon Kendra admite los siguientes operadores.

  • Operadores booleanos: lógica para limitar o ampliar la búsqueda. Por ejemplo, amazon AND sports limita la búsqueda para que solo busque documentos que contengan ambos términos.

  • Paréntesis: lee los términos de consulta anidados en orden de prioridad. Por ejemplo, (amazon AND sports) NOT rainforest lee (amazon AND sports) antes que NOT rainforest.

  • Rangos: valores de rango numérico o de fecha. Los rangos pueden ser inclusivos, exclusivos o ilimitados. Por ejemplo, puede buscar documentos que se actualizaron por última vez entre el 1 de enero de 2020 y el 31 de diciembre de 2020, con ambas fechas incluidas.

  • Campos: utiliza un campo específico para limitar la búsqueda. Por ejemplo, puede buscar documentos que tengan “Estados Unidos” en el campo “ubicación”.

  • Caracteres comodín: coinciden parcialmente con una cadena de texto. Por ejemplo, Cloud* podría coincidir CloudFormation. Amazon Kendra actualmente solo admite caracteres comodín al final.

  • Citas exactas: coinciden exactamente con una cadena de texto. Por ejemplo, los documentos que contienen "Amazon Kendra" "pricing".

Puede utilizar combinaciones de cualquiera de los operadores anteriores.

Tenga en cuenta que el uso excesivo de operadores o de consultas muy complejas podría afectar a la latencia de las consultas. Los caracteres comodín son algunos de los operadores que más afectan en términos de latencia. Por regla general, cuantos más términos y operadores utilice, mayor será el impacto potencial en la latencia. Otros factores que afectan a la latencia son el tamaño medio de los documentos indexados, el tamaño del índice, cualquier filtrado de los resultados de búsqueda y la carga total del índice. Amazon Kendra

Booleano

Puede combinar o excluir palabras mediante los operadores booleanos AND, OR y NOT.

Los siguientes ejemplos muestran el uso de los operadores booleanos.

amazon AND sports

Devuelve los resultados de búsqueda que contienen los términos “amazon” y “sports” en el texto, como vídeos de deporte de Amazon Prime u otro contenido similar.

sports OR recreation

Devuelve los resultados de búsqueda que contienen los términos “sports” o “recreation”, o ambos, en el texto.

amazon NOT rainforest

Devuelve los resultados de búsqueda que contienen el término “amazon” pero no el término “rainforest” en el texto. Se utiliza para buscar documentos sobre la empresa Amazon, no sobre la selva amazónica.

Paréntesis

Puede consultar palabras anidadas en orden de prioridad utilizando paréntesis. Los paréntesis indican Amazon Kendra cómo debe leerse una consulta.

Los siguientes ejemplos muestran el uso de los paréntesis como operadores.

(amazon AND sports) NOT rainforest

Devuelve los documentos que contienen los términos “amazon” y “sports” en el texto, pero no el término “rainforest”. Se utiliza para buscar contenidos como vídeos de deporte de Amazon Prime u otro contenido similar, y no para buscar deportes de aventura en la selva amazónica. Los paréntesis indican que amazon AND sports debe leerse antes que NOT rainforest. La consulta no debe leerse como amazon AND (sports NOT rainforest).

(amazon AND (sports OR recreation)) NOT rainforest

Devuelve documentos que contienen los términos “sports” o “recreation”, o ambos, y el término “amazon”. Sin embargo, no incluye el término “rainforest”. Se utiliza para buscar vídeos de deporte de Amazon Prime u otros contenidos de ocio, y no para buscar deportes de aventura en la selva amazónica. Los paréntesis indican que sports OR recreation debe leerse antes de combinarlo con “amazon”, que se lee antes que NOT rainforest. La consulta no debe leerse como amazon AND (sports OR (recreation NOT rainforest)).

Rangos

Puede utilizar un rango de valores para filtrar los resultados de búsqueda. Debe especificar un atributo y el rango de valores. Puede ser de tipo numérico o de fecha.

Los rangos de fechas deben tener los siguientes formatos:

  • Epoch

  • AAAA

  • AAAA-mm

  • AAAA-mm-dd

  • AAAA-mm-dd'T'HH

También puede especificar si desea incluir o excluir los valores inferior y superior del rango.

Los siguientes ejemplos muestran el uso de los rangos como operadores.

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

Devuelve los documentos que se procesaron en 2020, es decir, más tarde que el 31 de diciembre de 2019 y antes que el 1 de enero de 2021.

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

Devuelve los documentos que se procesaron en 2020, es decir, entre el 1 de enero de 2020 o más tarde y hasta el 31 de diciembre de 2020 o antes.

_document_likes:<1

Devuelve los documentos sin likes o sin valoraciones de los usuarios (menos de 1 like).

Puede especificar si un rango debe considerarse inclusivo o exclusivo de los valores del rango dados.

Inclusivo

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

Devuelve los documentos actualizados por última vez en 2020; incluye los días 1 de enero de 2020 y 31 de diciembre de 2020.

Exclusivo

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

Devuelve los documentos actualizados por última vez en 2020; excluye los días 31 de diciembre de 2019 y 1 de enero de 2021.

Para usar rangos ilimitados que no sean inclusivos ni exclusivos, simplemente use los operadores < y >. Por ejemplo, _last_updated_at:>2019-12-31 AND _last_updated_at:<2021-01-01

Campos

Puede limitar la búsqueda para que solo se devuelvan los documentos que cumplan un valor en un campo específico. El campo puede ser de cualquier tipo.

A continuación se muestran ejemplos del uso de operadores de contexto en el campo.

status:"Incomplete" AND financial_year:2021

Devuelve los documentos del ejercicio fiscal de 2021 con el estado incompleto.

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

Devuelve documentos relacionados con el ocio o el deporte profesional en los Estados Unidos.

Caracteres comodín

Puede ampliar la búsqueda para incluir variantes de palabras y frases utilizando el operador de carácter comodín. Esto resulta útil cuando se buscan variantes de nombres. Amazon Kendra actualmente solo admite caracteres comodín al final. El número de caracteres del prefijo de un carácter comodín final debe ser superior a dos.

Los siguientes ejemplos muestran el uso de los caracteres comodín como operadores.

Cloud*

Devuelve documentos que contienen variantes como CloudFormation y. CloudWatch

kendra*aws

Devuelve documentos que contienen variantes como kendra.amazonaws.

kendra*aws*

Devuelve documentos que contienen variantes como kendra.amazonaws.com.

Citas exactas

Puede utilizar las comillas para buscar una coincidencia exacta de un fragmento de texto.

A continuación se muestran ejemplos del uso de las comillas.

"Amazon Kendra" "pricing"

Devuelve los documentos que contienen “Amazon Kendra” y el término “pricing”. Los documentos deben incluir tanto “Amazon Kendra” como “pricing” para poder mostrarlos en los resultados.

"Amazon Kendra" "pricing" cost

Devuelve los documentos que contienen “Amazon Kendra” y el término “pricing”, y opcionalmente el término “cost”. Los documentos deben incluir tanto “Amazon Kendra” como “pricing” para poder mostrarlos en los resultados, pero no deben incluir necesariamente “cost”.

Sintaxis de consulta no válida

Amazon Kendra emite una advertencia si hay problemas con la sintaxis de la consulta o si la consulta no es compatible actualmente con Amazon Kendra. Para obtener más información, consulte la documentación de la API sobre las advertencias de las consultas.

Las siguientes consultas muestran ejemplos de sintaxis de consulta no válida.

_last_updated_at:<2021-12-32

Fecha no válida. El día 32 no existe en el calendario gregoriano, que es el que utiliza Amazon Kendra.

_view_count:ten

Valor numérico no válido. Se deben usar dígitos para representar valores numéricos.

nonExistentField:123

Búsqueda de campo no válida. El campo debe existir para poder utilizar la búsqueda de campos.

Product:[A TO D]

Rango no válido. Se deben usar valores numéricos o fechas para los rangos.

OR Hello

Operador booleano no válido. Los operadores deben usarse con términos y colocarse entre términos.

Buscar en otros idiomas

Puede buscar documentos en un idioma compatible. Debe introducir el código de idioma AttributeFilterpara que se devuelvan los documentos filtrados en el idioma que elija. Puede escribir la consulta en un idioma compatible.

Si no especifica un idioma, Amazon Kendra consulta los documentos en inglés de forma predeterminada. Para obtener más información acerca de los idiomas admitidos, incluidos sus códigos, consulte Adición de documentos en idiomas distintos del inglés.

Para buscar documentos en un idioma compatible en la consola, seleccione el índice y, a continuación, seleccione la opción de buscar en el índice en el menú de navegación. Elija el idioma en el que desea que se muestren los documentos. Para ello, seleccione la configuración de búsqueda y, a continuación, seleccione un idioma en el menú desplegable Idioma.

En los siguientes ejemplos se muestra cómo buscar documentos en español.

Para buscar un índice en español en la consola
  1. Inicie sesión AWS Management Console y abra la Amazon Kendra consola en http://console.aws.amazon.com/kendra/.

  2. En el menú de navegación, elija Índices y, a continuación, elija su índice.

  3. En el menú de navegación, elija la opción para buscar en el índice.

  4. En la configuración de búsqueda, seleccione el menú desplegable Idiomas y elija español.

  5. Escriba una consulta en el cuadro de texto y, a continuación, pulse Intro.

  6. Amazon Kendra devuelve los resultados de la búsqueda en español.

Para buscar un índice en español mediante la CLI, Python o Java
  • En el siguiente ejemplo se busca en un índice en español. Cambie el valor de searchString a su consulta de búsqueda y el valor de indexID al identificador del índice en el que desee buscar. El código de idioma de español es es. Puede reemplazarlo por el código de su idioma.

    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"); } } }