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. |
SearchVectors devuelve un error mientras el índice se está rellenando |
El índice vectorial aún no está listo para la búsqueda. IndexStatus es CREATING o IndexStatus es ACTIVE con Backfilling establecido en true. No puede buscar un índice vectorial hasta que se complete el proceso de relleno. |
Utilice DescribeTable y espere hasta que Backfilling sea false; a continuación, vuelva a intentar la 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 de clave de partición del índice vectorial |
Eliminar el atributo de clave de partición de índice vectorial de un elemento (mediante REMOVE en UpdateItem) u omitirlo 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 de clave de partición del índice vectorial. Si un elemento desaparece inesperadamente de los resultados de búsqueda, compruebe que su atributo de 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 de 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 de 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 de 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.
-
Cree un nuevo índice vectorial con la clave de partición que necesite. Use la API de
UpdateTablecon una acciónCreateen el parámetroVectorIndexUpdates. Asigne un nombre distinto al nuevo índice. Para obtener instrucciones, consulte Adición de un índice vectorial a una tabla existente. -
Espere a que el nuevo índice termine de rellenarse. Llame a
DescribeTabley confirme queIndexStatusesACTIVEyBackfillingesfalse. -
Actualice la aplicación para enviar solicitudes
SearchVectorsal nuevo índice. Incluya el valor de la clave de partición enSearchConditionExpression. Para obtener más información, consulte Filtro con SearchConditionExpression. -
Una vez que confirme los resultados correctos, elimine el índice anterior para dejar de pagar por su almacenamiento. Use la API de
UpdateTablecon una acciónDeleteen el parámetroVectorIndexUpdates. 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 el relleno.