TairVector es una estructura de datos extendida de Tair que permite almacenar y recuperar vectores en tiempo real con alto rendimiento.
TairVector
TairVector utiliza una estructura de datos hash de múltiples capas.
TairVector ofrece dos algoritmos de indexación: Hierarchical Navigable Small World (HNSW) y flat search:
HNSW: crea índices basados en grafos para la búsqueda de vectores y admite la recuperación de espacio de forma asíncrona. Este enfoque garantiza una alta precisión en las consultas y equilibra el rendimiento con las actualizaciones en tiempo real.
flat search: proporciona un 100 % de precisión en las consultas e inserción rápida de datos, por lo que resulta ideal para conjuntos de datos pequeños.
TairVector también admite varias métricas de distancia, como la distancia euclidiana, el producto interno, la distancia del coseno y la distancia de Jaccard. En comparación con los servicios tradicionales de búsqueda de vectores, TairVector ofrece a continuación las siguientes ventajas:
Almacena todos los datos en memoria y admite actualizaciones de índice en tiempo real para lograr una menor latencia de lectura y escritura.
Utiliza una estructura de datos en memoria optimizada para reducir el uso de memoria.
Proporciona un servicio en la nube listo para usar, con una arquitectura sencilla y eficiente que no depende de componentes complejos.
Admite la búsqueda híbrida, la cual combina la búsqueda de vectores con la búsqueda de texto completo.
Permite crear un índice invertido sobre valores escalares, como los atributos de etiqueta. De este modo, una búsqueda de k vecinos más cercanos (KNN) puede filtrar primero por escalares y luego ejecutar la búsqueda vectorial sobre los resultados filtrados.
Notas de la versión
13 de octubre de 2022: se lanzó TairVector en instancias de Tair basadas en DRAM compatibles con Redis 6.0.
22 de noviembre de 2022 (versión 6.2.2.0): se agregó compatibilidad con la métrica de distancia de Jaccard. Se mejoró el comando TVS.GETINDEX para devolver estadísticas de uso de memoria de cada índice en los campos
index_data_sizeyattribute_data_size.26 de diciembre de 2022 (versión 6.2.3.0): se agregó compatibilidad con el modo proxy en clústeres, el tipo de datos vectoriales FLOAT16 y los comandos TVS.MINDEXKNNSEARCH y TVS.MINDEXMKNNSEARCH.
4 de julio de 2023 (versión 6.2.8.2): se agregó compatibilidad con la métrica de distancia del coseno y con la recolección automática de elementos no utilizados para los índices HNSW.
3 de agosto de 2023 (versión 23.8.0.0): se agregó la posibilidad de establecer un tiempo de vida (TTL) a nivel de key mediante comandos como TVS.HEXPIREAT y TVS.HPEXPIREAT, así como búsquedas de vecinos más cercanos de vectores en listas de claves específicas con el comando TVS.GETDISTANCE. Esta versión también introdujo la búsqueda de texto completo al actualizar comandos como TVS.CREATEINDEX y TVS.KNNSEARCH, lo que habilita la búsqueda híbrida.
6 de junio de 2024 (versión 24.5.1.0): se agregaron los comandos TVS.KNNSEARCHFIELD y TVS.MINDEXKNNSEARCHFIELD para devolver información de atributos de etiqueta durante las búsquedas de vecinos más cercanos.
22 de julio de 2024 (versión 24.7.0.0): se habilitaron los índices HNSW para vectores dispersos.
Mejores prácticas
Requisitos previos
La instancia debe ser una instancia DRAM-based compatible con Redis 6.0 o posterior.
Una instancia basada en DRAM que ejecute Redis 5.0 no se puede actualizar a Redis 6.0. Para usar Redis 6.0, debe crear una nueva instancia basada en DRAM.
Notas
Estas operaciones se aplican a los datos de TairVector en una instancia de Tair.
TairVector no admite la función de hashtags de Redis en campos como index_name y Key.
TairVector no admite comandos como MOVE.
Si tiene requisitos estrictos de persistencia de datos, habilite semi-synchronous replication mode.
Referencia de comandos
Tabla 1. Comandos de TairVector
|
Tipo |
Comando |
Sintaxis |
Descripción |
|
Operaciones de índice |
|
Crea un índice vectorial y especifica el algoritmo para construir y consultar el índice, además de la función de distancia. El índice solo se puede eliminar con el comando |
|
|
|
Recupera los metadatos de un índice vectorial específico. |
||
|
|
Elimina un índice vectorial específico y todos los datos que contiene. |
||
|
|
Explora de forma incremental los índices vectoriales de una instancia de Tair que coinciden con los criterios especificados. |
||
|
Operaciones de datos vectoriales |
|
Inserta un registro de datos en un índice vectorial. Si ya existe un registro con la key especificada, se sobrescribe el registro existente. |
|
|
|
Recupera todos los atributos y valores del registro de datos correspondiente a la key especificada en un índice vectorial. |
||
|
|
Devuelve los valores de las attribute keys especificadas para una key determinada en un índice vectorial. |
||
|
|
Elimina el registro de datos especificado (key) del índice vectorial indicado. |
||
|
|
Elimina uno o más valores de attribute_key y sus valores de un registro (key) en un índice vectorial. |
||
|
|
Explora los registros de datos (identificados por key) que cumplen condiciones específicas dentro de un índice vectorial determinado. |
||
|
|
Incrementa en |
||
|
|
Incrementa el valor de |
||
|
|
Establece el tiempo de caducidad absoluto, en milisegundos, para un registro de datos identificado por su key dentro de un índice vectorial específico. |
||
|
|
Establece un tiempo de caducidad relativo, en milisegundos, para una key específica en un índice vectorial. |
||
|
|
Establece un tiempo de caducidad absoluto, con precisión de segundos, para una key específica en un índice vectorial. |
||
|
|
Establece un tiempo de caducidad relativo, en segundos, para un vector específico (key) en un índice vectorial. |
||
|
|
Devuelve el TTL, en milisegundos, de un registro de datos específico (key) en un índice vectorial. |
||
|
|
Recupera el TTL, en segundos, de un registro de datos específico (key) en un índice vectorial determinado. |
||
|
|
Devuelve el tiempo de caducidad absoluto de un registro de datos específico (key) en un índice vectorial, como una marca de tiempo Unix en milisegundos. |
||
|
|
Devuelve el tiempo de caducidad absoluto de un registro de datos específico (key) en un índice vectorial, como una marca de tiempo Unix en segundos. |
||
|
Consultas de vecinos más cercanos de vectores |
|
Ejecuta una consulta de vecinos más cercanos para un vector específico en un índice vectorial y devuelve hasta topN resultados. |
|
|
|
Busca en un índice vectorial los vecinos más cercanos de un vector específico. La lógica de búsqueda es idéntica a la de TVS.KNNSEARCH, pero este comando también devuelve atributos de etiqueta. |
||
|
|
Encuentra los vecinos más cercanos de un vector de consulta a partir de una lista de claves específica dentro de un índice vectorial. |
||
|
|
Ejecuta una búsqueda por lotes de vecinos más cercanos para varios vectores en un índice vectorial específico. |
||
|
|
Busca los vecinos más cercanos de un vector específico en varios índices vectoriales. |
||
|
|
Ejecuta una consulta de vecinos más cercanos para un vector específico en varios índices vectoriales y, de manera opcional, devuelve etiquetas. |
||
|
|
Busca en varios índices vectoriales los vecinos más cercanos de múltiples vectores. |
||
|
General |
|
Elimina uno o más índices de TairVector mediante el comando nativo DEL de Redis. |
A continuación se describen las convenciones de la sintaxis de comandos que se utiliza en este tema:
Uppercase keyword: indica la palabra clave del comando.Italic text: indica variables.[options]: indica que los parámetros entre corchetes son opcionales. Los parámetros que no están entre corchetes se deben especificar obligatoriamente.A|B: indica que los parámetros separados por barras verticales (|) son mutuamente excluyentes. Solo se puede especificar uno de ellos....: indica que el parámetro anterior a este símbolo se puede repetir.
TVS.CREATEINDEX
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Crea un índice vectorial y especifica el algoritmo para construir y consultar el índice, además de la función de distancia. El índice solo se puede eliminar con el comando |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comandos de ejemplo:
Salida de ejemplo:
|
TVS.GETINDEX
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Obtiene los metadatos de un índice vectorial específico. |
|
Parámetro |
|
|
Salida |
|
|
Ejemplo |
Ejecute primero a continuación los siguientes comandos:
Comando de ejemplo para un índice HNSW:
Salida de ejemplo:
|
TVS.DELINDEX
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(N), donde N es el número de claves en el índice vectorial. |
|
Descripción |
Elimina un índice vectorial específico y todos los datos que contiene. |
|
Parámetro |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando:
Salida:
|
TVS.SCANINDEX
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(N), donde N es el número de índices vectoriales en la instancia Tair. |
|
Descripción del comando |
Explora de forma incremental los índices vectoriales de una instancia Tair que coinciden con los criterios especificados. |
|
Opciones |
|
|
Salida |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
Comando de ejemplo con un patrón:
Salida de ejemplo:
|
TVS.HSET
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
La complejidad temporal es O(1) si no se crean ni actualizan datos vectoriales; de lo contrario, es O(log(N)), donde N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Inserta un registro de datos en un índice vectorial. Si ya existe un registro con la clave especificada, se sobrescribe el registro existente. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HGETALL
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Obtiene todos los atributos y valores del registro de datos correspondiente a la clave especificada en un índice vectorial. |
|
Parámetro |
|
|
Valor devuelto |
|
|
Ejemplo |
Ejemplo de comando:
Ejemplo de valor devuelto:
|
TVS.HMGET
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Devuelve los valores de las claves de atributo especificadas para una clave determinada en un índice vectorial. |
|
Parámetros |
|
|
Valores devueltos |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.DEL
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Elimina el registro de datos especificado (clave) del índice vectorial indicado. |
|
Parámetro |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HDEL
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Elimina uno o más attribute_key y sus valores de un registro (clave) en un índice vectorial. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.SCAN
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(N), donde N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Explora los registros de datos (identificados por la clave) que cumplen condiciones específicas dentro de un índice vectorial determinado. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Ejemplo de valor devuelto:
|
TVS.HINCRBY
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Incrementa en Si |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HINCRBYFLOAT
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Incrementa el valor de Si el |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HPEXPIREAT
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Establece el tiempo de expiración absoluto, en milisegundos, para un registro de datos identificado por su key dentro de un índice vectorial especificado. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HPEXPIRE
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Establece un tiempo de expiración relativo, en milisegundos, para una key específica dentro de un índice vectorial. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HEXPIREAT
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Establece un tiempo de expiración absoluto, con precisión de segundos, para una key específica dentro de un índice vectorial. |
|
Opciones |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Respuesta de ejemplo:
|
TVS.HEXPIRE
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Establece un tiempo de expiración relativo, en segundos, para un vector específico (key) dentro de un índice vectorial. |
|
Parámetros |
|
|
Salida |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HPTTL
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Devuelve el TTL, en milisegundos, de un registro de datos específico (key) dentro de un índice vectorial. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HTTL
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Obtiene el TTL, en segundos, de un registro de datos específico (key) dentro de un índice vectorial determinado. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Respuesta de ejemplo:
|
TVS.HPEXPIRETIME
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Devuelve el tiempo de expiración absoluto de un registro de datos específico (key) dentro de un índice vectorial, expresado como una marca de tiempo Unix en milisegundos. |
|
Parámetro |
|
|
Valor devuelto |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.HEXPIRETIME
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
O(1) |
|
Descripción del comando |
Devuelve el tiempo de expiración absoluto de un registro de datos específico (key) dentro de un índice vectorial, expresado como una marca de tiempo Unix en segundos. |
|
Parámetros |
|
|
Salida |
|
|
Ejemplo |
Comando de ejemplo:
Salida de ejemplo:
|
TVS.KNNSEARCH
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N es la cantidad de claves en el índice vectorial. |
|
Descripción del comando |
Ejecuta una consulta de vecinos más cercanos para un vector específico dentro de un índice vectorial y devuelve hasta topN resultados. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplos |
Ejecute a continuación los siguientes comandos de manera previa:
Ejemplo 1:
Respuesta 1:
Ejemplo 2:
Respuesta 2:
|
TVS.KNNSEARCHFIELD
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Busca en un índice vectorial los vecinos más cercanos de un vector especificado. La lógica de búsqueda es idéntica a la de TVS.KNNSEARCH, pero este comando también devuelve los atributos de etiqueta. |
|
Parámetro |
|
|
Valor devuelto |
|
|
Ejemplo |
Ejecute primero los siguientes comandos:
Comando de ejemplo:
Salida de ejemplo:
|
TVS.GETDISTANCE
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Busca los vecinos más cercanos de un vector de consulta dentro de una lista de claves especificada en un índice vectorial. |
|
Parámetro |
|
|
Salida |
|
|
Ejemplo |
Ejecute primero los siguientes comandos:
Comando de ejemplo:
Salida de ejemplo:
|
TVS.MKNNSEARCH
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Ejecuta una búsqueda por lotes de vecinos más cercanos para varios vectores en un índice vectorial especificado. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Ejecute previamente los siguientes comandos:
Comando de ejemplo:
Salida de ejemplo:
|
TVS.MINDEXKNNSEARCH
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Busca los vecinos más cercanos de un vector especificado en varios índices vectoriales. |
|
Parámetro |
|
|
Salida |
|
|
Ejemplo |
Ejecute primero estos comandos:
Comando de ejemplo:
Salida de ejemplo:
|
TVS.MINDEXKNNSEARCHFIELD
|
Categoría |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N es el número de claves en el índice vectorial. |
|
Descripción del comando |
Ejecuta una consulta de vecinos más cercanos para un vector especificado en varios índices vectoriales y, de manera opcional, devuelve etiquetas. |
|
Parámetros |
|
|
Salida |
|
|
Ejemplo |
Ejecute primero los siguientes comandos:
Comando de ejemplo:
Salida de ejemplo:
|
TVS.MINDEXMKNNSEARCH
|
Elemento |
Descripción |
|
Sintaxis |
|
|
Complejidad temporal |
N representa el número de claves en el índice vectorial. |
|
Descripción del comando |
Busca en varios índices vectoriales los vecinos más cercanos de múltiples vectores. |
|
Parámetros |
|
|
Valor devuelto |
|
|
Ejemplo |
Ejecute primero estos comandos:
Comando de ejemplo:
Salida de ejemplo:
|