

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.

# Adición de sinónimos personalizados a un índice
<a name="index-synonyms"></a>

Para añadir sinónimos personalizados a un índice, debe especificarlos en un archivo de tesauros. Puede incluir términos específicos de la empresa o especializados al Amazon Kendra usar sinónimos. Los sinónimos genéricos en inglés`leader, head`, como, están integrados Amazon Kendra y no deben incluirse en un archivo de tesauros, incluidos los sinónimos genéricos que utilizan guiones. Amazon Kendra admite sinónimos para todos los tipos de respuesta, incluidos los tipos de `DOCUMENT` respuesta `QUESTION_ANSWER` o `ANSWER` tipos de respuesta. Amazon Kendra actualmente no admite la adición de sinónimos marcados como palabras vacías. Esto se incluirá en una versión futura.

Amazon Kendra establece correlaciones entre sinónimos. Por ejemplo, al usar el par de sinónimos`Dynamo, Amazon DynamoDB`, Amazon Kendra correlaciona Dynamo con. Amazon DynamoDB La pregunta “¿Qué es la dinamo?” luego devuelve un documento como «¿Qué es Amazon DynamoDB?». Con sinónimos, Amazon Kendra puede detectar la correlación más fácilmente.

El archivo de sinónimos es un archivo de texto almacenado en un Amazon S3 depósito. Consulte [Adición de un tesauro a un índice](index-synonyms-adding-thesaurus-file.md).

El archivo de sinónimos utiliza el formato de sinónimos de [Solr.](https://lucene.apache.org/solr/guide/6_6/filter-descriptions.html#FilterDescriptions-SynonymGraphFilter) Amazon Kendra tiene un límite en el número de tesauros por índice. Consulte las [cuotas](https://docs.aws.amazon.com/kendra/latest/dg/quotas.html). 

Los sinónimos pueden ser útiles en las siguientes situaciones:
+ Términos especializados que no son sinónimos tradicionales en inglés, como `NLP, Natural Language Processing`.
+ Sustantivos propios con asociaciones semánticas complejas. Estos son sustantivos que es poco probable que el público en general comprenda, por ejemplo, en el machine learning, `cost, loss, model performance`. 
+ Diferentes formas de nombres de productos, por ejemplo, `Elastic Compute Cloud, EC2`.
+ Términos específicos de un dominio o de una empresa, como nombres de productos. Por ejemplo, `Route53, DNS`.

No utilice sinónimos en las siguientes situaciones:
+ Sinónimos genéricos en inglés, como `leader, head`. Estos sinónimos no son específicos de un dominio y el uso de sinónimos en estos escenarios puede tener efectos no deseados.
+ Errores tipográficos como `teh => the`.
+ Variantes morfológicas como los plurales y posesivos de los sustantivos, la forma comparativa y superlativa de los adjetivos y el tiempo pasado, el participio pasado y la forma progresiva de los verbos. Un ejemplo de adjetivos comparativos y superlativos es `good, better, best`.
+ Unigrama (palabra única): palabras que detienen palabras como `WHO`. Las palabras paralizantes de Unigram no están permitidas en el tesauro y se excluyen de la búsqueda. Por ejemplo, `WHO => World Health Organization` se rechaza. Sin embargo, puede usar `W.H.O.` como sinónimo y puede usar palabras vacías como parte de un sinónimo de varias palabras. Por ejemplo, `of` está permitido, pero `United States of America` no.

Los sinónimos personalizados facilitan la comprensión Amazon Kendra de la terminología específica de su empresa al ampliar las consultas para incluir los sinónimos específicos de su empresa. Si bien los sinónimos pueden mejorar la precisión de las búsquedas, es importante entender cómo afectan a la latencia para poder optimizarlos.

Una regla general para los sinónimos es: cuantos más términos de la consulta coincidan y se expandan con sinónimos, 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, los posibles filtros en los resultados de búsqueda y la carga total del índice. Amazon Kendra Las consultas que no coincidan con ningún sinónimo no se ven afectadas.

Una guía general sobre cómo los sinónimos afectan a la latencia:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/kendra/latest/dg/index-synonyms.html)

\$1 *El rendimiento varía en función del uso específico de los sinónimos y las configuraciones del índice. Es mejor probar el rendimiento de las búsquedas para obtener puntos de referencia más precisos para tu caso de uso específico.*

Si el tesauro es grande, tiene una tasa de expansión temporal alta y el aumento de la latencia no está dentro de los límites aceptables, puede probar una de las siguientes opciones o ambas:
+ Recorte el tesauro para reducir la relación de expansión (número de sinónimos por término).
+ Reduzca la cobertura general de los términos (número de líneas del tesauro).

Como alternativa, puede aumentar la capacidad de aprovisionamiento (unidades de almacenamiento virtuales) para compensar el aumento de la latencia.

**Topics**
+ [Crear un archivo de tesauro](index-synonyms-creating-thesaurus-file.md)
+ [Adición de un tesauro a un índice](index-synonyms-adding-thesaurus-file.md)
+ [Actualización de un tesauro](index-synonyms-update.md)
+ [Eliminar un tesauro](index-synonyms-delete.md)
+ [Aspectos destacados en los resultados de búsqueda](index-synonyms-enabling-synonyms-in-results.md)

# Crear un archivo de tesauro
<a name="index-synonyms-creating-thesaurus-file"></a>

Un archivo de Amazon Kendra sinónimos es un archivo codificado en UTF-8 que contiene una lista de sinónimos en el formato de lista de sinónimos de Solr. El archivo.zip debe tener menos de 5 MB. 

Hay dos formas de especificar las asignaciones de sinónimos:
+ Los *sinónimos bidireccionales* se especifican como una lista de términos separados por comas. Si el usuario consulta alguno de los términos, se utilizarán todos los términos de la lista para buscar documentos, incluido el término original consultado.
+ Los *sinónimos unidireccionales* se especifican como términos separados por el símbolo “=>” entre ellos para asignar los términos a sus sinónimos. Si el usuario consulta un término a la izquierda del símbolo “=>”, se asigna a un término de la derecha para buscar documentos utilizando el sinónimo. No se mapea al revés, por lo que es unidireccional.

Los sinónimos en sí distinguen mayúsculas de minúsculas, pero los términos a los que se asignan no distinguen mayúsculas de minúsculas. Por ejemplo, `ML => Machine Learning` significa que si su usuario consulta “ML” o “ml” o utiliza algún otro caso, se mapeará a "Machine Learning". Si tuviera que trazar este mapa a la inversa, `Machine Learning => ML`, entonces “Machine Learning” o “machine learning” o algún otro caso se asignaría a “ML”.

Un sinónimo no busca una coincidencia exacta con caracteres especiales. Por ejemplo, si busca dead-letter-queue ««, Amazon Kendra puede devolver documentos que coincidan con «cola de letras muertas» (sin guiones). Si los documentos contienen guiones, como dead-letter-queue ««, Amazon Kendra los procesa durante la búsqueda para eliminar los guiones. En el caso de los términos sinónimos genéricos en inglés que estén integrados en un archivo de tesauros Amazon Kendra y que no deban incluirse en él, Amazon Kendra puede buscar tanto en la versión del término con guión como en la versión sin guiones del término. Por ejemplo, si busca «tercero» y «tercero», obtendrá documentos que coincidan con cualquiera de Amazon Kendra las versiones de esos términos.

En el caso de los sinónimos que contienen palabras innecesarias o palabras de uso común, Amazon Kendra devuelve los documentos que coincidan con los términos, incluidas las palabras clave. Por ejemplo, puede crear una regla de sinónimos para asignar “on boarding” y “onboarding”. No puede utilizar únicamente palabras vacías como sinónimos. Por ejemplo, si busca «activado», Amazon Kendra no podrá mostrar todos los documentos que contengan «activado».

Algunas reglas de sinónimos se ignoran. Por ejemplo, `a => b` es una regla, pero `a => a` se ignora y no cuenta como regla.

El número de términos es el número de términos únicos en el archivo de sinónimos. El siguiente archivo de ejemplo incluye los términos `AWS CodeStar``ML`, `Machine Learning`, `autoscaling group`, `ASG` y más.

Hay una cantidad máxima de reglas de sinónimos por diccionario y una cantidad máxima de sinónimos por término. Para obtener más información, consulte [Cuotas para Amazon Kendra](quotas.md).

En el siguiente ejemplo, se muestra un archivo de diccionario con reglas de sinónimos. Cada línea contiene una única regla de sinónimos. Se ignoran las líneas en blanco y los comentarios.

```
# Lines starting with pound are comments and blank lines are ignored.

# Synonym relationships can be defined as unidirectional or bidirectional relationships.

# Unidirection relationships are represented by any term sequence 
# on the left hand side (LHS) of "=>" followed by synonyms on the right hand side (RHS)
CodeStar => AWS CodeStar
# This will map CodeStar to AWS CodeStar, but not vice-versa

# To map terms vice versa
ML => Machine Learning
Machine Learning => ML

# Multiple synonym relationships may be defined in one line as well by comma seperation.
autoscaling group, ASG => Auto Scaling group, autoscaling
# The above is equivalent to:
# autoscaling group => Auto Scaling group, autoscaling
# ASG => Auto Scaling group, autoscaling

# Bi-directional synonyms are comma separated terms with no "=>"
DNS, Route53, Route 53
# DNS, Route53, and Route 53 map to one another and are interchangeable at match time
# The above is equivalent to:
# DNS => Route53, Route 53
# Route53 => DNS, Route 53
# Route 53 => DNS, Route53

# Overlapping LHS terms will be merged
Beta => Alpha
Beta => Gamma
Beta, Delta
# is equivalent to:
# Beta => Alpha, Gamma, Delta
# Delta => Beta

# Each line contains a single synonym rule.
# Synonym rule count is the total number of lines defining synonym relationships
# Term count is the total number of unique terms for all rules.  
# Comments and blanks lines do not count.
```

# Adición de un tesauro a un índice
<a name="index-synonyms-adding-thesaurus-file"></a>

Los siguientes procedimientos muestran cómo agregar un archivo de sinónimos a un índice. Puede tardar de hasta 30 minutos en ver los efectos del archivo de sinónimos actualizado. Para más información sobre el archivo del tesauro, véase [Crear un archivo de tesauro](index-synonyms-creating-thesaurus-file.md). 

------
#### [ Console ]

**Para agregar un diccionario de sinónimos**

1. En el panel de navegación izquierdo, bajo el índice donde desea añadir una lista de sinónimos, su tesauro, seleccione **Sinónimos**. 

1. En la página de **Sinónimos**, elija **Añadir tesauro**. 

1. En **Definir tesauro**, asigne un nombre al tesauro y, si lo desea, una descripción.

1. En **la configuración del tesauro**, indique la Amazon S3 ruta al archivo del tesauro. El archivo debe tener un tamaño inferior a 5 MB.

1. En **Función de IAM**, seleccione una función o seleccione **Crear una nueva función** y especifique un nombre de función para crear una nueva función. Amazon Kendra utiliza este rol para acceder al Amazon S3 recurso en su nombre. El rol de IAM tiene el prefijo "AmazonKendra-». 

1. Seleccione **Guardar** para guardar la configuración y añadir el tesauro. Una vez ingerido, el tesauro se activa y los sinónimos aparecen resaltados en los resultados. Puede tardar hasta 30 minutos en ver los efectos de su archivo de tesauro. 

------
#### [ CLI ]

Para añadir un tesario a un índice con el, llame a: AWS CLI`create-thesaurus` 

```
aws kendra create-thesaurus \
--index-id index-id \
--name "thesaurus-name" \
--description "thesaurus-description" \
--source-s3-path "Bucket=bucket-name,Key=thesaurus/synonyms.txt" \
--role-arn role-arn
```

Llame a `list-thesauri` para ver una lista de tesauros:

```
aws kendra list-thesauri \
--index-id index-id
```

Para ver los detalles de un tesauro, llame a `describe-thesaurus`:

```
aws kendra describe-thesaurus \
--index-id index-id \
--index-id thesaurus-id
```

Puede tardar hasta 30 minutos en ver los efectos de su archivo de tesauro.

------
#### [ Python ]

```
import boto3
from botocore.exceptions import ClientError
import pprint
import time

kendra = boto3.client("kendra")

print("Create a thesaurus")

thesaurus_name = "thesaurus-name"
thesaurus_description = "thesaurus-description"
thesaurus_role_arn = "role-arn"

index_id = "index-id"

s3_bucket_name = "bucket-name"
s3_key = "thesaurus-file"
source_s3_path= {
    'Bucket': s3_bucket_name,
    'Key': s3_key
}

try:
    thesaurus_response = kendra.create_thesaurus(
        Description = thesaurus_description,
        Name = thesaurus_name,
        RoleArn = thesaurus_role_arn,
        IndexId = index_id,
        SourceS3Path = source_s3_path
    )

    pprint.pprint(thesaurus_response)

    thesaurus_id = thesaurus_response["Id"]

    print("Wait for Kendra to create the thesaurus.")

    while True:
        # Get thesaurus description
        thesaurus_description = kendra.describe_thesaurus(
            Id = thesaurus_id,
            IndexId = index_id
        )
        # If status is not CREATING quit
        status = thesaurus_description["Status"]
        print("Creating thesaurus. Status: " + status)
        if status != "CREATING":
            break
        time.sleep(60)

except ClientError as e:
        print("%s" % e)

print("Program ends.")
```

------
#### [ Java ]

```
package com.amazonaws.kendra;

import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.CreateThesaurusRequest;
import software.amazon.awssdk.services.kendra.model.CreateThesaurusResponse;
import software.amazon.awssdk.services.kendra.model.DescribeThesaurusRequest;
import software.amazon.awssdk.services.kendra.model.DescribeThesaurusResponse;
import software.amazon.awssdk.services.kendra.model.S3Path;
import software.amazon.awssdk.services.kendra.model.ThesaurusStatus;

public class CreateThesaurusExample {

  public static void main(String[] args) throws InterruptedException {

    KendraClient kendra = KendraClient.builder().build();

    String thesaurusName = "thesaurus-name";
    String thesaurusDescription = "thesaurus-description";
    String thesaurusRoleArn = "role-arn";

    String s3BucketName = "bucket-name";
    String s3Key = "thesaurus-file";
    String indexId = "index-id";

    System.out.println(String.format("Creating a thesaurus named %s", thesaurusName));
    CreateThesaurusRequest createThesaurusRequest = CreateThesaurusRequest
        .builder()
        .name(thesaurusName)
        .indexId(indexId)
        .description(thesaurusDescription)
        .roleArn(thesaurusRoleArn)
        .sourceS3Path(S3Path.builder()
            .bucket(s3BucketName)
            .key(s3Key)
            .build())
        .build();
    CreateThesaurusResponse createThesaurusResponse = kendra.createThesaurus(createThesaurusRequest);
    System.out.println(String.format("Thesaurus response %s", createThesaurusResponse));

    String thesaurusId = createThesaurusResponse.id();

    System.out.println(String.format("Waiting until the thesaurus with ID %s is created.", thesaurusId));

    while (true) {
      DescribeThesaurusRequest describeThesaurusRequest = DescribeThesaurusRequest.builder()
          .id(thesaurusId)
          .indexId(indexId)
          .build();
      DescribeThesaurusResponse describeThesaurusResponse = kendra.describeThesaurus(describeThesaurusRequest);
      ThesaurusStatus status = describeThesaurusResponse.status();
      if (status != ThesaurusStatus.CREATING) {
        break;
      }

      TimeUnit.SECONDS.sleep(60);
    }

    System.out.println("Thesaurus creation is complete.");
  }
}
```

------

# Actualización de un tesauro
<a name="index-synonyms-update"></a>

Puede cambiar la configuración de un tesauro después de crearlo. Puede cambiar detalles como el nombre del tesauro y la información de IAM. También puede cambiar la ubicación de la ruta Amazon S3 del archivo de tesauros. Si cambia la ruta al archivo de tesauros, Amazon Kendra reemplaza el tesauro existente por el tesauro especificado en la ruta actualizada. 

Puede tardar de hasta 30 minutos en ver los efectos del archivo de sinónimos actualizado. 

**nota**  
Si hay errores de validación o de sintaxis en el archivo del tesauro, se conserva el archivo del tesauro cargado anteriormente. 

Los siguientes procedimientos muestran cómo modificar los detalles del tesauro. 

------
#### [ Console ]

**Modificación de los detalles del tesauro**

1. En el panel de navegación izquierdo, en el índice que desee modificar, elija **Sinónimos**. 

1. En la página **Sinónimos**, seleccione el tesauro que desee modificar y, a continuación, elija **Editar**. 

1. En la página **Actualizar el tesauro**, actualice los detalles del tesauro. 

1. (Opcional) Seleccione **Cambiar la ruta del archivo del tesauro** y, a continuación, especifique una Amazon S3 ruta al nuevo archivo del tesauro. El archivo de tesauros existente se sustituye por el archivo que especifique. Si no cambia la ruta, Amazon Kendra vuelve a cargar el tesauro desde la ruta existente. 

   Si selecciona **Conservar el archivo del tesauro actual, Amazon Kendra no se vuelve a cargar el archivo** del tesauro. 

1. Seleccione **Guardar** para guardar la configuración. 

También puede volver a cargar el tesauro desde la ruta del tesauro existente. 

**Para volver a cargar un tesauro desde una ruta existente**

1. En el panel de navegación izquierdo, en el índice que desee modificar, elija **Sinónimos**. 

1. En la página **Sinónimos**, seleccione el tesauro que desea recargar y luego elija **Actualizar**. 

1. En la página **Recargar el archivo del tesauro**, confirme que desea actualizar el archivo del tesauro. 

------
#### [ CLI ]

Para actualizar un tesauro, llame a `update-thesaurus`: 

```
aws kendra update-thesaurus \
--index-id index-id \
--name "thesaurus-name" \
--description "thesaurus-description" \
--source-s3-path "Bucket=bucket-name,Key=thesaurus/synonyms.txt" \
--role-arn role-arn
```

------
#### [ Python ]

```
import boto3
from botocore.exceptions import ClientError
import pprint
import time

kendra = boto3.client("kendra")

print("Update a thesaurus")

thesaurus_name = "thesaurus-name"
thesaurus_description = "thesaurus-description"
thesaurus_role_arn = "role-arn"

thesaurus_id = "thesaurus-id"
index_id = "index-id"

s3_bucket_name = "bucket-name"
s3_key = "thesaurus-file"
source_s3_path= {
    'Bucket': s3_bucket_name,
    'Key': s3_key
}

try:
    kendra.update_thesaurus(
        Id = thesaurus_id,
        IndexId = index_id,
        Description = thesaurus_description,
        Name = thesaurus_name,
        RoleArn = thesaurus_role_arn,
        SourceS3Path = source_s3_path
    )
    
    print("Wait for Kendra to update the thesaurus.")

    while True:
        # Get thesaurus description
        thesaurus_description = kendra.describe_thesaurus(
            Id = thesaurus_id,
            IndexId = index_id
        )
        # If status is not UPDATING quit
        status = thesaurus_description["Status"]
        print("Updating thesaurus. Status: " + status)
        if status != "UPDATING":
            break
        time.sleep(60)

except ClientError as e:
        print("%s" % e)

print("Program ends.")
```

------
#### [ Java ]

```
package com.amazonaws.kendra;

import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.UpdateThesaurusRequest;
import software.amazon.awssdk.services.kendra.model.DescribeThesaurusRequest;
import software.amazon.awssdk.services.kendra.model.DescribeThesaurusResponse;
import software.amazon.awssdk.services.kendra.model.S3Path;
import software.amazon.awssdk.services.kendra.model.ThesaurusStatus;

public class UpdateThesaurusExample {

  public static void main(String[] args) throws InterruptedException {

    KendraClient kendra = KendraClient.builder().build();

    String thesaurusName = "thesaurus-name";
    String thesaurusDescription = "thesaurus-description";
    String thesaurusRoleArn = "role-arn";

    String s3BucketName = "bucket-name";
    String s3Key = "thesaurus-file";

    String thesaurusId = "thesaurus-id";
    String indexId = "index-id";

    UpdateThesaurusRequest updateThesaurusRequest = UpdateThesaurusRequest
        .builder()
        .id(thesaurusId)
        .indexId(indexId)
        .name(thesaurusName)
        .description(thesaurusDescription)
        .roleArn(thesaurusRoleArn)
        .sourceS3Path(S3Path.builder()
            .bucket(s3BucketName)
            .key(s3Key)
            .build())
        .build();
    kendra.updateThesaurus(updateThesaurusRequest);

    System.out.println(String.format("Waiting until the thesaurus with ID %s is updated.", thesaurusId));

    // a new source s3 path requires re-consumption by Kendra 
    // and so can take as long as a Create Thesaurus operation
    while (true) {
      DescribeThesaurusRequest describeThesaurusRequest = DescribeThesaurusRequest.builder()
          .id(thesaurusId)
          .indexId(indexId)
          .build();
      DescribeThesaurusResponse describeThesaurusResponse = kendra.describeThesaurus(describeThesaurusRequest);
      ThesaurusStatus status = describeThesaurusResponse.status();
      if (status != ThesaurusStatus.UPDATING) {
        break;
      }

      TimeUnit.SECONDS.sleep(60);
    }

    System.out.println("Thesaurus update is complete.");
  }
}
```

------

# Eliminar un tesauro
<a name="index-synonyms-delete"></a>

Los siguientes procedimientos muestran cómo eliminar un tesauro. 

------
#### [ Console ]

1. En el panel de navegación izquierdo, en el índice que desee modificar, elija **Sinónimos**. 

1. En la página **Sinónimos**, seleccione el tesauro que desee eliminar. 

1. En la página **Detalles del Tesauro**, seleccione **Eliminar** y luego confirme para borrar. 

------
#### [ CLI ]

Para eliminar un tesauro de un índice con el, llame a: AWS CLI`delete-thesaurus` 

```
aws kendra delete-thesaurus \
--index-id index-id \
--id thesaurus-id
```

------
#### [ Python ]

```
import boto3
from botocore.exceptions import ClientError

kendra = boto3.client("kendra")

print("Delete a thesaurus")

thesaurus_id = "thesaurus-id"
index_id = "index-id"

try:
    kendra.delete_thesaurus(
        Id = thesaurus_id,
        IndexId = index_id
    )

except ClientError as e:
        print("%s" % e)

print("Program ends.")
```

------
#### [ Java ]

```
package com.amazonaws.kendra;

import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.DeleteThesaurusRequest;

public class DeleteThesaurusExample {

  public static void main(String[] args) throws InterruptedException {

    KendraClient kendra = KendraClient.builder().build();

    String thesaurusId = "thesaurus-id";
    String indexId = "index-id";

    DeleteThesaurusRequest updateThesaurusRequest = DeleteThesaurusRequest
        .builder()
        .id(thesaurusId)
        .indexId(indexId)
        .build();
    kendra.deleteThesaurus(updateThesaurusRequest);
  }
}
```

------

# Aspectos destacados en los resultados de búsqueda
<a name="index-synonyms-enabling-synonyms-in-results"></a>

El resaltado de sinónimos está activado de forma predeterminada. La información destacada se incluye en los resultados de las consultas Amazon Kendra del SDK y la CLI. Si interactúa con el Amazon Kendra SDK o la CLI, determina cómo mostrar los resultados.

Los sinónimos destacados tendrán el tipo de resaltado `THESAURUS_SYNONYM`. Para obtener más información sobre las características principales, consulte el objeto [Resaltar](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Highlight.html).