View a markdown version of this page

Solução de problemas de índices vetoriais - Amazon DynamoDB

Solução de problemas de índices vetoriais

A tabela a seguir lista problemas comuns ao trabalhar com índices vetoriais e como resolvê-los.

Sintomas Causa Resolução
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH key O índice define uma chave de partição de índice vetorial (HASH) no SearchSchema, mas a pesquisa não forneceu o valor. Adicione a igualdade da chave de partição do índice vetorial a SearchConditionExpression, por exemplo Category = :cat, com uma entrada ExpressionAttributeValues correspondente.
ValidationException: One element in SearchSchema is not defined in attribute definitions Um atributo SearchSchema (chave de partição de índice vetorial ou filtro integrado) não é declarado nas AttributeDefinitions da tabela. Adicione cada atributo SearchSchema a AttributeDefinitions com o tipo, da mesma forma que os atributos de chave são declarados para um índice secundário global.
ValidationException: Invalid comparator used in SearchConditionExpression Um operador diferente de = foi usado. Atualmente, apenas o operador de igualdade é compatível com atributos de chave de partição de índice vetorial e filtro integrado. Regrave a condição para usar somente =. Operadores de comparação, intervalo e associação por conjuntos ainda não estão disponíveis.
ValidationException: Provided TopK value is out of valid range TopK estava fora do intervalo de 1 a 100. Defina TopK como um valor de 1 a 100, inclusive.
SearchVectors retorna um erro enquanto o índice está sendo preenchido O índice vetorial ainda não está pronto para pesquisa. IndexStatus é CREATING ou IndexStatus é ACTIVE com Backfilling definido como true. Você não pode pesquisar um índice vetorial até que o preenchimento seja concluído. Use DescribeTable e espere até que Backfilling seja false; depois, repita a pesquisa.
A gravação é rejeitada ao gravar um item com um vetor O vetor tem o número errado de dimensões para o índice. O comprimento do vetor deve corresponder às Dimensions do índice. Consulte Gravação de itens com dados vetoriais.
A gravação é rejeitada com “Tipo inválido para parâmetro” O atributo vetorial tem um tipo de dados errado. O DynamoDB espera uma lista de números de ponto flutuante de 32 bits. As causas comuns incluem o envio de uma String (S), um escalar Number (N), um Number Set (NS) ou uma List contendo elementos não numéricos. A mensagem de erro identifica o índice do elemento com problema quando um único membro tem o tipo errado. Envie o atributo vetorial como uma List (L) de Numbers (N). Verifique se cada elemento na lista é um número válido e se o comprimento da lista corresponde às Dimensions do índice.
O item não é mais retornado por SearchVectors depois de remover ou omitir o atributo da chave de partição do índice vetorial Remover o atributo da chave de partição do índice vetorial de um item (via REMOVE em UpdateItem) ou omiti-lo em PutItem não produz um erro. No entanto, o item é desindexado silenciosamente e não aparece mais nos resultados da pesquisa, mesmo que o item da tabela de base e a incorporação vetorial ainda existam. Cada item que você deseja que seja pesquisável deve reter o atributo da chave de partição do índice vetorial. Se um item desaparecer inesperadamente dos resultados da pesquisa, verifique se o atributo de chave de partição ainda está presente no item da tabela de base.
A gravação é rejeitada com “não pode conter um valor de string vazio” ou incompatibilidade de tipo da chave de partição do índice vetorial O atributo da chave de partição do índice vetorial foi definido como uma string vazia ou gravado com o tipo de dados errado. O DynamoDB rejeita essas gravações porque um atributo de chave de índice não pode ficar vazio e deve corresponder ao tipo declarado. Use um valor válido e não vazio com o tipo de dados correto para o atributo da chave de partição do índice vetorial. Verifique a definição do índice para confirmar o tipo esperado.
Falta um atributo nos resultados da pesquisa O índice vetorial não projeta esse atributo. Só é possível recuperar atributos projetados no índice. Para retornar atributos adicionais, recrie o índice com uma projeção mais ampla ou defina ProjectionType como ALL.

Adição de uma chave de partição a um índice vetorial existente

O SearchSchema do índice vetorial é fixo no momento da criação. Não é possível adicionar, remover ou alterar a chave de partição (HASH) depois de criar o índice. Você também não pode alterar os atributos do filtro integrado. Para alterar o esquema, crie um novo índice e migre para ele.

Para adicionar uma chave de partição ou alterar outros atributos de SearchSchema, realize as etapas a seguir.

  1. Crie um novo índice vetorial com a chave de partição necessária. Use a API UpdateTable com uma ação Create no parâmetro VectorIndexUpdates. Dê um nome diferente ao novo índice. Para instruções, consulte Adição de um índice vetorial a uma tabela existente.

  2. Aguarde até que o novo índice termine de ser preenchido. Chame DescribeTable e confirme se IndexStatus é ACTIVE e se Backfilling é false.

  3. Atualize seu aplicativo para enviar solicitações SearchVectors ao novo índice. Inclua o valor da chave de partição em SearchConditionExpression. Para obter mais informações, consulte Filtragem com SearchConditionExpression.

  4. Depois de confirmar os resultados corretos, exclua o índice antigo para parar de pagar pelo armazenamento. Use a API UpdateTable com uma ação Delete no parâmetro VectorIndexUpdates. Para instruções, consulte Excluir um índice de vetores.

As operações de indexação não afetam os dados da tabela de base

Criar ou excluir um índice vetorial não afeta a tabela de base nem os itens. O DynamoDB deriva novamente os dados vetoriais dos itens da tabela de base durante o preenchimento.