View a markdown version of this page

Solución de problemas de índices vectoriales - Amazon DynamoDB

Solución de problemas de índices vectoriales

En la tabla siguiente, se muestran los problemas más frecuentes que pueden surgir al trabajar con los índices vectoriales y se explica cómo resolverlos.

Síntoma Causa Resolución
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH key El índice define una clave de partición de índice vectorial (HASH) en su SearchSchema, pero la búsqueda no proporcionó su valor. Agregue la clave de partición del índice vectorial igual a SearchConditionExpression, por ejemplo Category = :cat, con una entrada ExpressionAttributeValues coincidente.
ValidationException: One element in SearchSchema is not defined in attribute definitions Un atributo SearchSchema (clave de partición de índice vectorial o filtro en línea) no se declara en AttributeDefinitions de la tabla. Agregue cada atributo de SearchSchema a AttributeDefinitions con su tipo, del mismo modo que se declaran los atributos clave para un índice secundario global.
ValidationException: Invalid comparator used in SearchConditionExpression Se utilizó un operador distinto de =. Actualmente, solo se admite el operador de igualdad para los atributos de clave de partición de índice vectorial y filtro en línea. Vuelva a escribir la condición para usar solo =. Los operadores de comparación, rango y pertenencia a conjuntos aún no están disponibles.
ValidationException: Provided TopK value is out of valid range TopK estaba fuera del rango de 1 a 100. Establezca TopK en un valor de 1 a 100, ambos inclusive.
ValidationException: Cannot search backfilling vector index: <indexName> o ValidationException: The table does not have the specified index: <indexName> El índice vectorial aún no está listo para la búsqueda. IndexStatus es CREATING, es decir, mientras el índice está aprovisionado o mientras rellena los datos existentes. Utilice DescribeTable y espere hasta que IndexStatus sea ACTIVE y Backfilling no sea true; a continuación, vuelva a intentar la búsqueda. Se considera que ValidationException se puede volver a intentar durante la creación del índice.
ValidationException: The table does not have the specified index: <indexName> cuando el índice existe e DescribeTable informa IndexStatus ACTIVE El punto de conexión de búsqueda dedicado aún no ha empezado a servir el índice. DescribeTable y SearchVectors los sirven distintos puntos de conexión, y el punto de conexión de búsqueda puede sufrir un breve retraso una vez que el índice pasa a estar ACTIVE. Vuelva a intentar la búsqueda. Se considera que ValidationException se puede volver a intentar inmediatamente después de que un índice pase a estar ACTIVE. Si el error persiste, confirme el nombre del índice y que la red permite el nombre de host del punto de conexión de búsqueda.
Se rechaza la escritura al escribir un elemento con un vector El vector tiene un número de dimensiones incorrecto para el índice. Asegúrese de que la longitud del vector coincide con las Dimensions del índice. Consulte Escritura de elementos con datos vectoriales.
Se rechaza la escritura con “Tipo no válido para parámetro” El atributo vectorial tiene un tipo de datos incorrecto. DynamoDB espera una lista de números de coma flotante de 32 bits. Las causas más comunes incluyen el envío de una cadena (S), un escalar numérico (N), un conjunto de números (NS) o una lista que contenga elementos no numéricos. El mensaje de error indica el índice del elemento infractor cuando un solo miembro tiene el tipo incorrecto. Envíe el atributo vectorial como una lista (L) de números (N). Compruebe que todos los elementos de la lista son números válidos y que la longitud de la lista coincide con las Dimensions del índice.
El elemento ya no lo devuelve SearchVectors después de eliminar u omitir el atributo clave de partición del índice vectorial La eliminación del atributo de la clave de partición de índice vectorial de un elemento (mediante REMOVE en UpdateItem) o la omisión en un PutItem no produce ningún error. Sin embargo, el elemento se desindexa silenciosamente y ya no aparece en los resultados de búsqueda, aunque el elemento de la tabla base y su incrustación vectorial sigan existiendo. Asegúrese de que cada elemento que desee buscar retenga el atributo clave de partición del índice vectorial. Si un elemento desaparece inesperadamente de los resultados de búsqueda, compruebe que su atributo clave de partición sigue presente en el elemento de la tabla base.
Se rechaza la escritura por “no puede contener un valor de cadena vacío” o el tipo de clave de partición del índice vectorial no coincide El atributo clave de partición del índice vectorial se estableció en una cadena vacía o se escribió con un tipo de datos incorrecto. DynamoDB rechaza estas escrituras porque un atributo clave de índice no puede estar vacío y debe coincidir con el tipo declarado. Utilice un valor válido y no vacío con el tipo de datos correcto para el atributo clave de partición del índice vectorial. Compruebe la definición del índice para confirmar el tipo esperado.
Falta un atributo en los resultados de la búsqueda El índice vectorial no proyecta este atributo. Solo puede recuperar los atributos proyectados en el índice. Para obtener atributos adicionales, vuelva a crear el índice con una proyección más amplia o establezca ProjectionType en ALL.

Adición de una clave de partición a un índice vectorial existente

El SearchSchema del índice vectorial se fija en el momento de la creación. No puede agregar, quitar ni cambiar la clave de partición (HASH) después de crear el índice. Tampoco puede cambiar los atributos del filtro en línea. Para cambiar el esquema, cree un índice nuevo y migre a él.

Para agregar una clave de partición o cambiar otros atributos de SearchSchema, realice los siguientes pasos.

  1. Cree un nuevo índice vectorial con la clave de partición que necesite. Use la API UpdateTable con una acción Create en el parámetro VectorIndexUpdates. Asigne un nombre distinto al nuevo índice. Para obtener instrucciones, consulte Adición de un índice vectorial a una tabla existente.

  2. Espere a que el nuevo índice termine la reposición. Llame a DescribeTable y confirme que IndexStatus es ACTIVE y Backfilling es false.

  3. Actualice la aplicación para enviar solicitudes SearchVectors al nuevo índice. Incluya el valor de la clave de partición en SearchConditionExpression. Para obtener más información, consulte Filtro con SearchConditionExpression.

  4. Una vez que confirme los resultados correctos, elimine el índice anterior para dejar de pagar por su almacenamiento. Use la API UpdateTable con una acción Delete en el parámetro VectorIndexUpdates. Para obtener instrucciones, consulte Eliminación de un índice vectorial.

Las operaciones de indexación no afectan a los datos de la tabla base

La creación o eliminación de un índice vectorial no afecta a la tabla base ni a sus elementos. DynamoDB vuelve a derivar los datos vectoriales de los elementos de la tabla base durante la reposición.