Indexar vetores

Esta página explica como armazenar vetores em hashes. Os hashes oferecem uma forma eficiente de armazenar vetores no Redis.

Serialização de dados

Antes de armazenar vetores num hash Redis, os vetores têm de ser convertidos num formato que o Redis compreenda. Requer a serialização de vetores em blobs binários, em que o tamanho é igual ao tamanho em bytes do tipo de dados (por exemplo, 4 para FLOAT32) multiplicado pelo número de dimensões do vetor. Uma escolha popular para vetores numéricos é a biblioteca NumPy do Python:

Ligue-se ao Redis

Antes de armazenar o vetor num hash, estabeleça uma ligação à sua instância do Redis através de um cliente como o redis-py:

Armazene o vetor num hash

Os hashes do Redis são semelhantes a dicionários, com pares de chave-valor. Use o comando HSET do Redis para armazenar o seu vetor serializado:

import numpy as np
import redis

# Sample vector
vector = np.array([1.2, 3.5, -0.8], dtype=np.float32) # 3-dimensional vector

# Serialize to a binary blob
serialized_vector = vector.tobytes()

redis_client = redis.cluster.RedisCluster(host='your_redis_host', port=6379)

redis_client.hset('vector_storage', 'vector_key', serialized_vector)  # 'vector_key' is a unique identifier
  • Para uma indexação bem-sucedida, os dados vetoriais têm de cumprir as dimensões e o tipo de dados definidos no esquema do índice.

Preenchimento de índices

O preenchimento de índices pode ocorrer num dos seguintes cenários:

  • Assim que um índice é criado, o procedimento de preenchimento retroativo procura no espaço de chaves do Redis entradas que cumpram os critérios do filtro de índice.
  • Os índices vetoriais e os respetivos dados são mantidos em cópias instantâneas da RDB. Quando um ficheiro RDB é carregado, é acionado um processo automático de preenchimento de índice. Este processo deteta e integra ativamente quaisquer entradas novas ou modificadas no índice desde que a imagem instantânea da RDB foi criada, mantendo a integridade do índice e garantindo resultados atuais.