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 buscas en tu índice,Amazon Kendrautiliza toda la información que ha proporcionado sobre sus documentos para determinar cuáles son los documentos más relevantes para los términos de búsqueda introducidos. Algunos de los artículos queAmazon Kendraconsidera que:

  • El texto del documento.

  • El título del documento.

  • Campos de texto personalizados que ha marcado como aptos para búsqueda.

  • El campo de fecha que ha indicado debe usarse para determinar la «frescura» de un documento.

Cuando se haya seleccionado un conjunto de documentos pertinentes del índice,Amazon Kendrafiltra la respuesta en función de los filtros de atributos que haya solicitado para la búsqueda. Por ejemplo, si tiene un atributo personalizado llamado «departamento», puede filtrar la respuesta para devolver solo documentos de un departamento llamado «legal». Para obtener más información, consulte Creación de atributos de documento personalizados.

Después de encontrar los documentos pertinentes y, a continuación, filtrar en función de los atributos que haya establecido,Amazon Kendradevuelve los resultados. Los resultados están ordenados por la relevancia queAmazon Kendradeterminado para cada doc. Los resultados están paginados para que puedas mostrar una página a la vez a tu usuario.

Para buscar documentos indexados conAmazon KendraparaAmazon Lex, UsarUseAMAZON.KendraSearchIntent. Para ver un ejemplo de cómo configurarAmazon KendraconAmazon Lex, consulteCreación de un bot de preguntas frecuentes sobreAmazon KendraÍndice.

En el siguiente ejemplo de Python se muestra cómo buscar en un índice mediante laQueryAPI. El ejemplo determina el tipo de resultado de la búsqueda (respuesta, documento, pregunta/respuesta) y muestra el texto de la respuesta.

Para obtener más información sobre las respuestas de la consulta, consulteRespuestas de consulta.

nota

Puede usar este código para filtrar los atributos del documento. El tema .Consultas de filtradocontiene ejemplos que puede usar para reemplazar el siguiente código.

response=kendra.query( QueryText = query, IndexId = index)

Requisitos previos

Para ejecutar este ejemplo, debe:

Búsqueda en índices (consola)

Puede utilizar elAmazon Kendraconsola para buscar y probar el índice. Puede realizar consultas y ver los resultados.

Para buscar en un índice con la consola

  1. Inicie sesión enAWS Management Consoley abra el iconoAmazon KendraConsola de enhttp://console.aws.amazon.com/kendra/.

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

  3. Elija su índice.

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

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

  6. Amazon Kendradevuelve los resultados de la búsqueda.

Búsqueda en índices (SDK)

Para buscar en un índice con Python o Java

  • En el siguiente ejemplo se busca en un índice. Cambie el valor dequerya tu consulta de búsqueda yindex_idoindexIdal identificador de índice del índice que se desea buscar.

    Python
    import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the query text query = "search-string" 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 = "some queries"; String indexId = "anIndexId"; 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"); } } }

Búsqueda con sintaxis de consulta avanzada

Puede crear consultas que sean más específicas que las consultas simples de palabras clave o de lenguaje natural mediante el uso de operadores o sintaxis de consulta avanzados. Esto incluye rangos, booleanos, comodines y más. Mediante el uso de operadores, puede dar más contexto a la consulta y refinar aún más los resultados de la búsqueda.

Amazon Kendraadmite los siguientes operadores.

  • Booleano: Lógica para limitar o ampliar la búsqueda. Por ejemplo,amazon AND sportslimita la búsqueda a solo los documentos que contienen ambos términos.

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

  • Intervalos: Valores de fecha o rango numérico. 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, incluidas estas fechas.

  • Campos : Usa un campo específico para limitar la búsqueda. Por ejemplo, puede buscar documentos que contengan «Estados Unidos» en el campo «ubicación».

  • Caracteres comodín: Coincidir parcialmente con una cadena de texto. Por ejemplo,Cloud*podría coincidir CloudFormation.Amazon Kendraactualmente solo admite comodines finales.

  • Comillas exactas: Coincidencia exacta de una cadena de texto. Por ejemplo, documentos que contienen"Amazon Kendra" "pricing".

Puede utilizar una combinación de cualquiera de los operadores anteriores.

Tenga en cuenta que el uso excesivo de operadores o consultas muy complejas podría afectar a la latencia de las consultas. Los comodines son algunos de los operadores más caros en términos de latencia. Una regla general es que cuantos más términos y operadores utilices, mayor será el impacto potencial en la latencia. Otros factores que afectan a la latencia incluyen el tamaño medio de los documentos indexados, el tamaño del índice, cualquier filtro en los resultados de búsqueda y la carga general deAmazon Kendraíndice.

Booleano

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

Los siguientes son ejemplos del uso de operadores booleanos.

amazon AND sports

Devuelve los resultados de búsqueda que contienen los términos «amazon» y «sports» en el texto, como Amazon Prime video sports u otro contenido similar.

sports OR recreation

Devuelve los resultados de búsqueda que contienen los términos «deportes» o «recreación», 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 «selva tropical» en el texto. Esto es para buscar documentos sobre la empresa Amazon, no sobre la selva amazónica.

Paréntesis

Puede consultar las palabras anidadas por orden de prioridad mediante paréntesis. Los paréntesis indicanAmazon Kendracómo debe leerse una consulta.

Los siguientes son ejemplos del uso de operadores de paréntesis.

(amazon AND sports) NOT rainforest

Devuelve documentos que contienen los términos «amazon» y «sports» en el texto, pero no el término «selva tropical». Esto es para buscar deportes de vídeo de Amazon Prime u otro contenido similar, no deportes de aventura en la selva amazónica. Los paréntesis ayudan a indicar queamazon AND sportsdebe leerse antesNOT rainforest. La consulta no debe leerse comoamazon AND (sports NOT rainforest).

(amazon AND (sports OR recreation)) NOT rainforest

Devuelve los documentos que contienen los términos «deportes» o «recreación», o ambos, y el término «amazon». Pero no incluye el término «selva tropical». Esto es para buscar video deportes o recreación de Amazon Prime, no deportes de aventura en la selva amazónica. Los paréntesis ayudan a indicar quesports OR recreationdebe leerse antes de combinar con 'amazon', que se lee antesNOT rainforest. La consulta no debe leerse comoamazon AND (sports OR (recreation NOT rainforest)).

Rango de

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

Los intervalos de fechas deben tener los siguientes formatos:

  • Epoch

  • YYYY

  • aaaa-mm

  • aaaa-mm-dd

  • yyyy-MM-MM-dd'T'MM-

También puede especificar si desea incluir o excluir los valores más bajos y más altos del rango.

Los siguientes son ejemplos del uso de operadores de rango.

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

Documentos de devoluciones que se procesaron en 2020: más del 31 de diciembre de 2019 y menos del 1 de enero de 2021.

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

Documentos de devoluciones que se procesaron en 2020: mayores o iguales al 1 de enero de 2020 y menores o iguales al 31 de diciembre de 2020.

_document_likes:<1

Devuelve documentos sin «me gusta» o sin comentarios del usuario (menos de 1 me gusta).

Puede especificar si un rango debe tratarse como inclusivo o excluyente de los valores de rango dados.

Inclusivo

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

Documentos de devolución actualizados por última vez en 2020; incluye los días 1 de diciembre de 2020 y 31 de diciembre de 2020.

Exclusivo

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

Documentos de devolución actualizados por última vez en 2020; no incluye los días 31 de diciembre de 2019 y 1 de enero de 2021.

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

Campos

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

Los siguientes son ejemplos del uso de operadores de contexto de nivel de campo.

status:"Incomplete" AND financial_year:2021

Devuelve los documentos del año fiscal 2021 con su estado de incompletos.

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

Devuelve documentos que tratan sobre deportes o actividades recreativas profesionales en los Estados Unidos.

Caracteres comodín

Puede ampliar la búsqueda para tener en cuenta las variantes de palabras y frases con el operador comodín. Esto resulta útil cuando se buscan variantes de nombres.Amazon Kendraactualmente solo admite comodines finales. El número de caracteres de prefijo de un comodín final debe ser superior a dos.

Los siguientes son ejemplos del uso de operadores comodín.

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

Presupuestos exactos

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

Los siguientes son ejemplos del uso de comillas.

"Amazon Kendra" "pricing"

Devuelve documentos que contienen la frase 'Amazon Kendra'y el término 'precios'. Los documentos deben contenerAmazon Kendra'y' precios 'para mostrar los resultados.

"Amazon Kendra" "pricing" cost

Devuelve documentos que contienen la frase 'Amazon Kendra'y el término' fijación de precios 'y, opcionalmente, el término 'cost'. Los documentos deben contenerAmazon Kendra«y «precios» para mostrar los resultados, pero puede que no incluyan necesariamente el «costo».

Sintaxis de las consultas

Amazon Kendraemite una advertencia si hay problemas con la sintaxis de la consulta o si la consulta no está admitida porAmazon Kendra. Para obtener más información, consulte laDocumentación de API para advertencias de consultas.

Las siguientes consultas son 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 usado porAmazon 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 campos 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

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

Búsqueda en idiomas

Puede buscar documentos en un idioma admitido. Esto permite a los usuarios buscar y encontrar documentos en su idioma nativo. Se pasa el código de idioma en laAttributeFilterpara devolver los documentos filtrados en el idioma elegido. Puede escribir la consulta en un idioma admitido.

Si no especifica ningún idioma,Amazon Kendraconsulta documentos en inglés de forma predeterminada. Para obtener más información sobre los lenguajes admitidos, incluidos sus códigos, consulteAdición de documentos en idiomas distintos del inglés.

Para buscar documentos en un idioma admitido en la consola, seleccione el índice y, a continuación, seleccione la opción para buscar en el índice en el menú de navegación. Elige el idioma al que quieres devolver los documentos seleccionando la configuración de búsqueda y, a continuación, un idioma en el menú desplegableIdioma.

Los siguientes ejemplos muestran cómo buscar documentos en español.

Para buscar un índice en español en la consola

  1. Inicie sesión enAWS Management Consoley abra el iconoAmazon KendraConsola de enhttp://console.aws.amazon.com/kendra/.

  2. En el menú de navegación, seleccioneÍndicesy elige tu í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, selecciona laIdiomas dey elige español.

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

  6. Amazon Kendradevuelve 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 valorsearchStringa la consulta de búsqueda y el valorindexIDal identificador del índice que se desea buscar. El código de idioma de español eses. Puede sustituirlo por su propio código de 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"); } } }