Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):Vector

Última actualización: Sep 06, 2026

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 data structure 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

  1. 13 de octubre de 2022: se lanzó TairVector en instancias de Tair basadas en DRAM compatibles con Redis 6.0.

  2. 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_size y attribute_data_size.

  3. 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. 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.

  5. 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. 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.

  7. 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.

Nota

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

TVS.CREATEINDEX

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ...

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 TVS.DELINDEX.

TVS.GETINDEX

TVS.GETINDEX index_name

Recupera los metadatos de un índice vectorial específico.

TVS.DELINDEX

TVS.DELINDEX index_name

Elimina un índice vectorial específico y todos los datos que contiene.

TVS.SCANINDEX

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

Explora de forma incremental los índices vectoriales de una instancia de Tair que coinciden con los criterios especificados.

Operaciones de datos vectoriales

TVS.HSET

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

Inserta un registro de datos en un índice vectorial. Si ya existe un registro con la key especificada, se sobrescribe el registro existente.

TVS.HGETALL

TVS.HGETALL index_name key

Recupera todos los atributos y valores del registro de datos correspondiente a la key especificada en un índice vectorial.

TVS.HMGET

TVS.HMGET index_name key attribute_key [attribute_key ...]

Devuelve los valores de las attribute keys especificadas para una key determinada en un índice vectorial.

TVS.DEL

TVS.DEL index_name key [key ...]

Elimina el registro de datos especificado (key) del índice vectorial indicado.

TVS.HDEL

TVS.HDEL index_name key attribute_key [attribute_key ...]

Elimina uno o más valores de attribute_key y sus valores de un registro (key) en un índice vectorial.

TVS.SCAN

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

Explora los registros de datos (identificados por key) que cumplen condiciones específicas dentro de un índice vectorial determinado.

TVS.HINCRBY

TVS.HINCRBY index_name key attribute_key num

Incrementa en num el valor entero de attribute_key para el registro de datos especificado (key) en un índice vectorial.

TVS.HINCRBYFLOAT

TVS.HINCRBYFLOAT index_name key attribute_key num

Incrementa el valor de attribute_key de un registro de datos determinado (key) con el número de punto flotante num en un índice vectorial específico.

TVS.HPEXPIREAT

TVS.HPEXPIREAT index_name key milliseconds-timestamp

Establece el tiempo de caducidad absoluto, en milisegundos, para un registro de datos identificado por su key dentro de un índice vectorial específico.

TVS.HPEXPIRE

TVS.HPEXPIRE index_name key milliseconds-timestamp

Establece un tiempo de caducidad relativo, en milisegundos, para una key específica en un índice vectorial.

TVS.HEXPIREAT

TVS.HEXPIREAT index_name key timestamp

Establece un tiempo de caducidad absoluto, con precisión de segundos, para una key específica en un índice vectorial.

TVS.HEXPIRE

TVS.HEXPIRE index_name key timestamp

Establece un tiempo de caducidad relativo, en segundos, para un vector específico (key) en un índice vectorial.

TVS.HPTTL

TVS.HPTTL index_name key

Devuelve el TTL, en milisegundos, de un registro de datos específico (key) en un índice vectorial.

TVS.HTTL

TVS.HTTL index_name key

Recupera el TTL, en segundos, de un registro de datos específico (key) en un índice vectorial determinado.

TVS.HPEXPIRETIME

TVS.HPEXPIRETIME index_name key

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.

TVS.HEXPIRETIME

TVS.HEXPIRETIME index_name key

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

TVS.KNNSEARCH

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

Ejecuta una consulta de vecinos más cercanos para un vector específico en un índice vectorial y devuelve hasta topN resultados.

TVS.KNNSEARCHFIELD

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

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.

TVS.GETDISTANCE

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

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.

TVS.MKNNSEARCH

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Ejecuta una búsqueda por lotes de vecinos más cercanos para varios vectores en un índice vectorial específico.

TVS.MINDEXKNNSEARCH

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

Busca los vecinos más cercanos de un vector específico en varios índices vectoriales.

TVS.MINDEXKNNSEARCHFIELD

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

Ejecuta una consulta de vecinos más cercanos para un vector específico en varios índices vectoriales y, de manera opcional, devuelve etiquetas.

TVS.MINDEXMKNNSEARCH

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Busca en varios índices vectoriales los vecinos más cercanos de múltiples vectores.

General

DEL

DEL key [key ...]

Elimina uno o más índices de TairVector mediante el comando nativo DEL de Redis.

Nota

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

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key algo_param_value] ...

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 TVS.DELINDEX.

Parámetros

  • index_name: el nombre del índice vectorial.

  • dims: la dimensión del vector. Todos los vectores que se inserten en el índice deben tener la misma dimensión. El valor debe estar en el rango [1, 32768].

  • algorithm: el algoritmo para construir y consultar el índice. Valores válidos:

    • FLAT: ejecuta consultas mediante búsqueda por fuerza bruta sin crear un índice independiente. Este algoritmo es adecuado para conjuntos de datos pequeños con menos de 10 000 registros.

    • HNSW: construye un índice basado en grafos HNSW para las consultas. Este algoritmo es adecuado para conjuntos de datos grandes.

  • distance_method: el método para calcular la distancia entre vectores. Valores válidos:

    • L2: la distancia euclidiana al cuadrado.

    • IP: el producto interno. La distancia se calcula como 1 - inner product.

    • COSINE: la distancia del coseno. La distancia se calcula como 1 - cosine similarity. Cuando se usa la distancia del coseno, los vectores de entrada se convierten en vectores unitarios (normalización L2). Por lo tanto, los vectores devueltos podrían no ser idénticos a los originales.

    • JACCARD: la distancia de Jaccard. La distancia se calcula como 1 - Jaccard coefficient. Requiere que el parámetro data_type se establezca en BINARY.

  • algo_param_key y algo_param_value:

    • data_type: el tipo de datos del vector denso. Valores válidos:

      • FLOAT32 (predeterminado): un número de punto flotante de precisión simple de 4 bytes.

      • FLOAT16: un número de punto flotante de precisión media de 2 bytes que cumple con el estándar IEEE 754-2008. Este tipo de datos reduce el uso de almacenamiento para los vectores, aunque puede provocar cierta pérdida de precisión. El rango de valores de FLOAT16 es [-65519, 65519].

      • BINARY: un vector binario que solo contiene ceros y unos. Este tipo de datos solo se puede usar con la función de distancia de Jaccard.

    • Parámetros específicos de los índices HNSW:

      • ef_construct: el tamaño de la lista dinámica que se usa durante la construcción del índice con el algoritmo HNSW. El valor predeterminado es 100 y el rango válido es [1, 1000]. Un valor mayor suele mejorar la precisión de las consultas, pero reduce el rendimiento.

      • M: el número máximo de conexiones salientes para cada nodo en cada capa del grafo. El valor predeterminado es 16 y el rango válido es [1, 100]. Un valor mayor suele mejorar la precisión de las consultas, pero reduce el rendimiento.

      • auto_gc: habilita o deshabilita la recuperación automática del espacio del índice. Los valores válidos son false (predeterminado) y true. Esta función requiere que la versión secundaria de la instancia sea 6.2.8.2 o posterior. Los índices HNSW usan eliminación marcada. Habilitar esta función permite la recuperación automática de espacio, lo que reduce el uso de memoria, pero podría afectar el rendimiento de las consultas de vecinos más cercanos. Se recomienda habilitar esta función en escenarios donde la memoria es un factor crítico.

    • Parámetros específicos de los índices híbridos:

      • Para crear un índice invertido en un campo de etiqueta específico, debe especificar el nombre del campo y su tipo de datos.

        Use la sintaxis inverted_index_<field_name> int|long|float|double|string para crear un índice invertido en field_name. Los tipos de datos compatibles son int, long, float, double y string. Las palabras clave de field_name y del tipo de datos deben escribirse en minúsculas.

        Por ejemplo, para crear un índice invertido en un campo llamado productname de tipo String, use inverted_index_productname string.

      • lexical_algorithm: el algoritmo de búsqueda de texto completo.

        • bm25: el algoritmo BM25 (Okapi BM25), adecuado para la búsqueda de texto completo.

          • Cuando escriba datos posteriormente con TVS.HSET, establezca attribute_key en TEXT (debe ir en mayúsculas). Así se construye automáticamente un índice de texto completo sobre el attribute_value correspondiente.

          • Usted proporciona el texto original y Tair construye el índice.

        • vector: el algoritmo vectorial, adecuado para vectores dispersos.

          Debe codificar el texto original (embedding) y proporcionar el vector disperso. El formato de datos es "[[,],[,],...]", donde index es un uint32_t y value es un Float que representa el peso o la frecuencia del término.

      • Si establece lexical_algorithm en bm25, también puede configurar a continuación los siguientes parámetros.

        • analyzer: el analizador. Actualmente se admiten jieba (predeterminado) e ik_smart.

        • k1: controla la saturación de la frecuencia de términos en el algoritmo BM25. El valor debe ser mayor que 0. El valor predeterminado es 1.2.

        • b: controla la influencia de la longitud del documento en el algoritmo BM25. El valor debe estar en el rango [0, 1]. El valor predeterminado es 0.75.

      • Si establece lexical_algorithm en vector, también puede configurar a continuación los siguientes parámetros.

        • lexical_use_hnsw: especifica si se usa un índice HNSW para vectores dispersos. Valores válidos: 1 (usar un índice HNSW) y 0 (predeterminado, usar un índice invertido).

        • lexical_hnsw_m: cuando lexical_use_hnsw se establece en 1, este parámetro especifica el valor M para el índice HNSW, tal como se describe en la sección Parámetros específicos de los índices HNSW anterior.

        • lexical_hnsw_ef_construct: cuando lexical_use_hnsw se establece en 1, este parámetro especifica el valor ef_construct para el índice HNSW, tal como se describe en la sección Parámetros específicos de los índices HNSW anterior.

      • hybrid_ratio: el peso predeterminado de la búsqueda vectorial en una consulta. El valor debe ser un número flotante en el rango [0, 1]. El valor predeterminado es 0.5. El peso de la búsqueda de texto completo se calcula como 1 - hybrid_ratio.

Valor devuelto

  • Devuelve OK si la operación se completa correctamente.

  • De lo contrario, devuelve un mensaje de error.

Ejemplo

Comandos de ejemplo:

# Create a vector index with a vector dimension of 2, the HNSW algorithm, the Jaccard distance function, and the BINARY data type.
TVS.CREATEINDEX index_name0 2 HNSW JACCARD data_type BINARY

# Create a vector index with a vector dimension of 2, the HNSW algorithm, the L2 distance function, and the FLOAT32 data type.
TVS.CREATEINDEX index_name1 2 HNSW L2 

# Create a vector index with a vector dimension of 2, the FLAT algorithm, the IP distance function, and the FLOAT32 data type.
TVS.CREATEINDEX index_name2 2 FLAT IP 

# Create a vector index with a vector dimension of 2, the FLAT algorithm, the Jaccard distance function, and the BINARY data type.
TVS.CREATEINDEX index_name3 2 FLAT JACCARD data_type BINARY

# Create a hybrid index combining HNSW vector search with bm25 full-text search.
TVS.CREATEINDEX index_name4 2 HNSW IP lexical_algorithm bm25 inverted_index_productname string

# Create a sparse vector index with a vector dimension of 2, the IP distance function, and an HNSW index.
TVS.CREATEINDEX index_name5 2 HNSW IP lexical_algorithm vector lexical_use_hnsw 1 lexical_hnsw_m 8 lexical_hnsw_ef_construct 100

Salida de ejemplo:

OK

TVS.GETINDEX

Elemento

Descripción

Sintaxis

TVS.GETINDEX index_name

Complejidad temporal

O(1)

Descripción del comando

Obtiene los metadatos de un índice vectorial específico.

Parámetro

  • index_name: el nombre del índice vectorial.

Salida

  • Si el comando se ejecuta correctamente, devuelve los metadatos del índice vectorial.

  • Si el índice vectorial especificado no existe, devuelve (empty array).

  • En caso contrario, devuelve un mensaje de error.

Ejemplo

Ejecute primero a continuación los siguientes comandos:

TVS.CREATEINDEX my_index 2 HNSW L2 auto_gc true lexical_algorithm bm25
TVS.HSET my_index key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index key2 VECTOR [5,6] creation_time 1750

Comando de ejemplo para un índice HNSW:

TVS.GETINDEX my_index

Salida de ejemplo:

 1) "lexical_term_count"   // The number of terms in the full-text index.
 2) "0"
 3) "lexical_record_count" // The number of documents in the full-text index.
 4) "0"
 5) "lexical_algorithm"    // The full-text indexing algorithm.
 6) "bm25"
 7) "auto_gc"              // Specifies if automatic memory space reclamation is enabled for the HNSW index.
 8) "1"
 9) "dimension"            // The vector dimension.
10) "2"
11) "attribute_data_size"  // The memory usage of attribute data, in bytes.
12) "3720"
13) "distance_method"      // The distance method.
14) "L2"
15) "data_type"            // The vector data type.
16) "FLOAT32"
17) "algorithm"            // The indexing algorithm.
18) "HNSW"
19) "index_data_size"      // The memory usage of vector data, in bytes.
20) "105128040"
21) "M"                    // The maximum number of outgoing neighbors for each node in the graph index structure. This parameter is returned only for HNSW indexes.
22) "16"
23) "data_count"           // The number of user records.
24) "3"
25) "current_record_count" // The total number of vectors.
26) "3"
27) "ef_construct"         // The size of the dynamic array used during index construction. This parameter is returned only for HNSW indexes.
28) "100"
29) "inverted_index_productname" // Information about the inverted index, including the field name, data type, and count.
30) "field: productname, type: string, size: 1"
31) "delete_record_count"  // The number of vectors to be deleted.
32) "0"

TVS.DELINDEX

Elemento

Descripción

Sintaxis

TVS.DELINDEX index_name

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

  • index_name: el nombre del índice vectorial.

Valor devuelto

  • Devuelve 1 si el índice vectorial se elimina correctamente.

  • Devuelve 0 si el índice especificado no existe.

  • En caso contrario, devuelve un mensaje de error.

Ejemplo

Comando:

TVS.DELINDEX index_name0

Salida:

(integer) 1

TVS.SCANINDEX

Elemento

Descripción

Sintaxis

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

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

  • cursor: el cursor para la exploración. Use 0 para la exploración inicial. Para las exploraciones posteriores, utilice el cursor que devolvió la llamada anterior.

  • pattern: un patrón de estilo glob que se usa para filtrar índices vectoriales por nombre.

  • count: una sugerencia sobre el número de elementos que se deben explorar en cada iteración. El valor predeterminado es 10, pero la cantidad real de elementos devueltos puede variar.

Salida

  • Devuelve una matriz que contiene dos elementos:

    • El cursor para la siguiente iteración. Un valor de "0" indica que la exploración finalizó.

    • Una matriz con los nombres de los índices vectoriales (index_name) encontrados en la exploración actual.

  • Si el comando falla, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.SCANINDEX 0

Salida de ejemplo:

1) "0"
2) 1) "index_name1"
   2) "index_name0"
   3) "index_name2"
   4) "index_name3"

Comando de ejemplo con un patrón:

TVS.SCANINDEX 0 MATCH **name[0|1]

Salida de ejemplo:

1) "0"
2) 1) "index_name1"
   2) "index_name0"

TVS.HSET

Elemento

Descripción

Sintaxis

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

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

  • index_name: el nombre del índice vectorial.

  • key: la clave principal del registro de datos. Utilice el comando TVS.DEL para eliminar el registro.

  • attribute_key y attribute_value: los atributos del registro, especificados como uno o más pares clave-valor.

    • Para insertar datos vectoriales, establezca attribute_key con la palabra clave VECTOR (debe estar en mayúsculas). El attribute_value correspondiente debe ser una cadena de datos vectoriales que coincida con la dimensión (dims) del índice vectorial. Por ejemplo: VECTOR [1,2]. Cada clave solo admite un atributo VECTOR. Si vuelve a establecer este atributo para la misma clave, se sobrescriben los datos existentes.

    • Para insertar datos de texto, debe haber configurado los parámetros del índice híbrido al crear el índice. Establezca attribute_key con la palabra clave TEXT (debe estar en mayúsculas). El attribute_value correspondiente puede ser un dato de texto, como "TairVector is a proprietary vector database service developed by Tair", o un embedding, como "[[2,0.221],[42,09688],...]".

    • También puede agregar otros atributos o metadatos personalizados, como create_time 1663637425 (hora de creación) o location Hangzhou (ubicación).

Valor devuelto

  • Si la ejecución es correcta, el comando devuelve el número de atributos nuevos agregados al registro de datos. Si solo se actualizaron atributos existentes, devuelve 0.

  • En caso contrario, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HSET my_index key5 VECTOR [7,8] TEXT "TairVector is a proprietary vector database service developed by Tair" create_time 1800

Salida de ejemplo:

(integer) 3

TVS.HGETALL

Elemento

Descripción

Sintaxis

TVS.HGETALL index_name key

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

  • index_name: el nombre del índice vectorial.

  • key: la clave principal del registro de datos.

Valor devuelto

  • Si la ejecución es correcta, devuelve una matriz con los atributos y sus valores correspondientes de forma alternada para la clave especificada.

  • Si el índice vectorial o la clave especificada no existen, se devuelve una (empty array).

  • En caso contrario, se devuelve un mensaje de error.

Ejemplo

Ejemplo de comando:

TVS.HGETALL index_name0 key0

Ejemplo de valor devuelto:

1) "VECTOR"
2) "[1,2]"
3) "location"
4) "Hangzhou"
5) "create_time"
6) "1663637425"

TVS.HMGET

Elemento

Descripción

Sintaxis

TVS.HMGET index_name key attribute_key [attribute_key ...]

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

  • index_name: el nombre del índice vectorial.

  • key: la clave principal del registro.

  • attribute_key: la clave o claves de atributo que se van a obtener. Para obtener el vector, especifique la palabra clave VECTOR (debe estar en mayúsculas). Para obtener los datos de texto sin procesar del índice de texto completo, especifique la palabra clave TEXT (debe estar en mayúsculas).

Valores devueltos

  • Si la ejecución es correcta, devuelve una matriz con los valores de los attribute_key especificados, en el orden solicitado. Si una clave de atributo no existe, el comando devuelve nil en su lugar.

  • En caso contrario, el comando devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HMGET index_name0 key0 create_time location VECTOR TEXT

Salida de ejemplo:

1) "1800"
2) "[7,8]"
3) "TairVector is a proprietary vector database service developed by Tair"

TVS.DEL

Elemento

Descripción

Sintaxis

TVS.DEL index_name key [key ...]

Complejidad temporal

O(1)

Descripción del comando

Elimina el registro de datos especificado (clave) del índice vectorial indicado.

Parámetro

  • index_name: el nombre del índice vectorial.

  • key: la clave principal de un registro de datos.

Valor devuelto

  • Éxito: elimina el registro de datos especificado (clave) y devuelve el recuento de eliminaciones para dicha clave.

  • Devuelve 0 si el índice vectorial no existe.

  • En caso contrario, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.DEL index_name0 keyV

Salida de ejemplo:

 (integer) 1

TVS.HDEL

Elemento

Descripción

Sintaxis

TVS.HDEL index_name key attribute_key [attribute_key ...]

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

  • index_name: el nombre del índice vectorial.

  • key: la clave principal del registro.

  • attribute_key: la clave de atributo para la operación. Puede especificar varias claves. Para eliminar datos vectoriales, pase la palabra clave VECTOR en mayúsculas. Para eliminar los datos completos del índice, pase la palabra clave TEXT en mayúsculas.

Valor devuelto

  • Devuelve el número de attribute_key eliminados.

  • Devuelve 0 si el índice vectorial no existe.

  • En otros casos, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HDEL index_name0 keyc VECTOR

Salida de ejemplo:

 (integer) 1

TVS.SCAN

Categoría

Descripción

Sintaxis

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

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

  • index_name: el nombre del índice vectorial.

  • cursor: el cursor para la exploración. Use 0 para la primera exploración. Para las exploraciones posteriores, utilice el cursor que devolvió la llamada anterior.

  • pattern: un patrón de estilo glob para hacer coincidir claves.

  • count: el número sugerido de elementos que se deben explorar en cada iteración. El valor predeterminado es 10. No se garantiza que la cantidad real de elementos devueltos sea exacta.

  • filter_string: las condiciones de filtro.

    • Admite operadores como +, -, *, /, <, >, !=, (), && y ||. Los operadores > y < no admiten comparaciones de cadenas. Para incluir una cadena literal en el filtro, escape las comillas con una barra diagonal inversa (\). Por ejemplo: create_time > 1663637425 && location == \"Hangzhou\".

    • Separe los operadores de sus operandos con espacios. Por ejemplo: "creation_time > 1735".

    • No se admiten comparaciones booleanas directas, como flag == true. En su lugar, compare el valor como una cadena: flag == \"true\".

  • vector: el vector de consulta. Este parámetro debe usarse junto con el parámetro max_distance.

  • max_distance: el umbral de distancia máximo. Este parámetro debe usarse junto con el parámetro vector. Cuando se especifican ambos, el comando solo devuelve resultados cuya distancia respecto al vector de consulta sea menor que max_distance.

Valor devuelto

  • Si la ejecución es correcta, el comando devuelve una matriz con dos elementos:

    • El primer elemento es el cursor para la siguiente iteración. Un valor de 0 indica que la exploración finalizó.

    • El segundo elemento es una matriz con los nombres de las claves de los registros de datos encontrados en la iteración actual.

  • Si la ejecución falla, el comando devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.SCAN index_name0 0

Ejemplo de valor devuelto:

1) "0"
2) 1) "key0"
   2) "keyV"

TVS.HINCRBY

Categoría

Descripción

Sintaxis

TVS.HINCRBY index_name key attribute_key num

Complejidad temporal

O(1)

Descripción del comando

Incrementa en num el valor entero de attribute_key para el registro de datos especificado (clave) en un índice vectorial.

Si attribute_key no existe, el comando lo establece en 0 antes de aplicar el incremento. Si el valor de attribute_key no es un entero, el comando devuelve un error.

Parámetros

  • index_name: el nombre del índice vectorial.

  • key: el identificador de clave principal del registro de datos.

  • attribute_key: la clave de atributo que se va a incrementar.

  • num: el valor entero que se va a sumar.

Valor devuelto

  • Respuesta de tipo entero: el nuevo valor de attribute_key.

  • En caso contrario, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HINCRBY index_name0 key0 tv01 20

Salida de ejemplo:

(integer) 20

TVS.HINCRBYFLOAT

Categoría

Descripción

Sintaxis

TVS.HINCRBYFLOAT index_name key attribute_key num

Complejidad temporal

O(1)

Descripción del comando

Incrementa el valor de attribute_key para un registro de datos específico (key) mediante el número de punto flotante num, dentro de un índice vectorial especificado.

Si el attribute_key indicado no existe, se crea con num como valor inicial.

Parámetros

  • index_name: nombre del índice vectorial.

  • key: identificador de clave principal del registro.

  • attribute_key: clave del atributo que se va a incrementar.

  • num: valor de punto flotante que se suma en el incremento.

Valor devuelto

  • Si la operación se completa correctamente, devuelve el valor actualizado de la clave del atributo.

  • En caso de fallo, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HINCRBYFLOAT index_name0 key0 tv02 9.34

Salida de ejemplo:

"9.34"

TVS.HPEXPIREAT

Categoría

Descripción

Sintaxis

TVS.HPEXPIREAT index_name key milliseconds-timestamp

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

  • index_name: nombre del índice vectorial.

  • key: clave principal del registro de datos.

  • milliseconds-timestamp: marca de tiempo UNIX expresada en milisegundos. Si corresponde a un momento en el pasado, la key expira de inmediato.

Valor devuelto

  • Devuelve 1 si se establece el tiempo de espera para una key existente.

  • Devuelve 0 si la key no existe.

  • En cualquier otro caso, devuelve una excepción.

Ejemplo

Comando de ejemplo:

TVS.HPEXPIREAT index_name0 key1 16914619090000

Salida de ejemplo:

(integer) 1

TVS.HPEXPIRE

Elemento

Descripción

Sintaxis

TVS.HPEXPIRE index_name key milliseconds-timestamp

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

  • index_name: nombre del índice vectorial.

  • key: identificador de clave principal del vector.

  • milliseconds-timestamp: tiempo de expiración relativo, en milisegundos.

Valor devuelto

  • 1 si se estableció la expiración.

  • 0 si la clave no existe.

  • Un error en los demás casos.

Ejemplo

Comando de ejemplo:

TVS.HPEXPIRE index_name0 key1 1000

Salida de ejemplo:

(integer) 1

TVS.HEXPIREAT

Categoría

Descripción

Sintaxis

TVS.HEXPIREAT index_name key timestamp

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

  • index_name: nombre del índice vectorial.

  • key: clave principal del registro.

  • timestamp: marca de tiempo UNIX en segundos. Si corresponde a un momento en el pasado, la key expira de inmediato.

Valor devuelto

  • Devuelve 1 si se establece el tiempo de espera para la key.

  • Devuelve 0 si la key no existe.

  • En cualquier otro caso, devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HEXPIREAT index_name0 key2 1691466981

Respuesta de ejemplo:

(integer) 1

TVS.HEXPIRE

Categoría

Descripción

Sintaxis

TVS.HEXPIRE index_name key timestamp

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

  • index_name: nombre del índice vectorial.

  • key: identificador de clave principal del vector.

  • timestamp: tiempo de expiración relativo, en segundos.

Salida

  • Si el tiempo de espera se establece correctamente para una key existente: 1.

  • Si la key no existe: 0.

  • En cualquier otro caso, se devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HEXPIRE index_name0 key2 100

Salida de ejemplo:

(integer) 1

TVS.HPTTL

Categoría

Descripción

Sintaxis

TVS.HPTTL index_name key

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

  • index_name: nombre del índice vectorial.

  • key: clave principal del registro de datos.

Valor devuelto

  • El TTL en milisegundos, si la key existe y tiene un tiempo de expiración configurado.

  • -1 si la key existe, pero no tiene un tiempo de expiración configurado.

  • -2 si la key o el index_name no existen.

  • Un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HPTTL index_name0 key2

Salida de ejemplo:

(integer) 65417

TVS.HTTL

Categoría

Descripción

Sintaxis

TVS.HTTL index_name key

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

  • index_name: nombre del índice vectorial.

  • key: clave principal del registro de datos.

Valor devuelto

  • El TTL restante en segundos, si la key existe y tiene un tiempo de expiración.

  • -1, si la key existe, pero no tiene un tiempo de expiración.

  • -2, si la key o el index_name no existen.

  • Un mensaje de excepción para cualquier otro error.

Ejemplo

Comando de ejemplo:

TVS.HTTL index_name0 key2

Respuesta de ejemplo:

(integer) 58

TVS.HPEXPIRETIME

Categoría

Descripción

Sintaxis

TVS.HPEXPIRETIME index_name key

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

  • index_name: nombre del índice vectorial.

  • key: identificador de clave principal del registro de datos.

Valor devuelto

  • Si la key existe y tiene un tiempo de expiración configurado: el tiempo de expiración absoluto como una marca de tiempo Unix en milisegundos.

  • Si la key existe, pero no tiene un tiempo de expiración configurado: -1.

  • Si la key o el index_name no existen: -2.

  • En cualquier otro caso: el mensaje de error correspondiente.

Ejemplo

Comando de ejemplo:

TVS.HPEXPIRETIME index_name0 key2

Salida de ejemplo:

(integer) 1691473985764

TVS.HEXPIRETIME

Elemento

Descripción

Sintaxis

TVS.HEXPIRETIME index_name key

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

  • index_name: nombre del índice vectorial.

  • key: identificador de clave principal del registro de datos.

Salida

  • Si la key existe y tiene un tiempo de expiración configurado, el valor es el tiempo de expiración absoluto (marca de tiempo Unix) en segundos.

  • La key existe, pero no tiene un tiempo de expiración: -1.

  • Si la key o el index_name no existen, el comando devuelve -2.

  • En los demás casos, el comando devuelve un mensaje de error.

Ejemplo

Comando de ejemplo:

TVS.HEXPIRETIME index_name0 key2

Salida de ejemplo:

(integer) 1691473985

TVS.KNNSEARCH

Elemento

Descripción

Sintaxis

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

Complejidad temporal

  • Algoritmo HNSW: O(log(N))

  • Algoritmo FLAT: O(N)

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

  • index_name: nombre del índice vectorial.

  • topN: cantidad de resultados que se van a devolver. El valor debe estar en el rango [1, 10000].

  • vector: valor del vector que se usa para ejecutar la consulta de vecinos más cercanos. Si solo desea ejecutar una búsqueda de texto completo sobre un índice híbrido, pase "" a este campo.

  • filter_string: condición de filtro.

    • Admite operadores como +-*/<>!=()&&||. No admite comparaciones de cadenas con "mayor que" o "menor que". Para incluir una cadena literal en el filtro, debe usar un carácter de escape (\) en las comillas. Por ejemplo: "create_time > 1663637425 && location == \"Hangzhou\"".

    • Los operadores deben separarse de sus operandos con espacios. Por ejemplo: "creation_time > 1735".

    • No se admiten comparaciones booleanas directas, como flag == true. En su lugar, compare el valor como una cadena: flag == \"true\".

  • param_key y param_value: parámetros operativos de la consulta, especificados como pares clave-valor. A continuación se muestran los parámetros compatibles:

    • ef_search: tamaño de la lista dinámica para la búsqueda. El valor predeterminado es 100 y el rango válido es [1, 1000]. Un valor mayor suele mejorar la precisión de la búsqueda, pero incrementa la sobrecarga de rendimiento. Este parámetro es exclusivo del algoritmo HNSW.

      Para un índice híbrido que utiliza un índice HNSW para vectores dispersos, use sparse_ef_search para especificar el parámetro ef_search del índice de vectores dispersos.

    • MAX_DIST: límite máximo de distancia. Debe ser un valor float. Filtra las claves cuya distancia al vector de consulta sea mayor que este valor.

    • TEXT: texto de consulta para una búsqueda híbrida, que puede ser texto o un vector. Si no se especifica este parámetro o se establece en "", no se ejecuta ninguna búsqueda de texto completo y solo se realiza la búsqueda vectorial.

    • hybrid_ratio: peso de los resultados de la búsqueda vectorial en esta consulta. El valor debe ser un float en el rango [0, 1]. El valor predeterminado es el valor de hybrid_ratio establecido durante la creación del índice. El peso de la búsqueda de texto completo se calcula como 1-hybrid_ratio.

    • De forma predeterminada, el sistema utiliza una estrategia PostFilter, que ejecuta la búsqueda vectorial de k vecinos más cercanos (KNN) antes de aplicar el filtrado escalar.

      • vector_filter_count: cantidad máxima de candidatos que se filtran a partir de los resultados de la búsqueda vectorial. Valor predeterminado: 10,000.

        Con la estrategia PostFilter, la búsqueda se detiene si se filtran más candidatos que este número sin encontrar topN resultados.

      • fulltext_filter_count: cantidad máxima de candidatos que se filtran a partir de los resultados de la búsqueda de texto completo. Valor predeterminado: 10,000.

        Con la estrategia PostFilter, la búsqueda se detiene si se filtran más candidatos que este número sin encontrar topN resultados.

      • Para utilizar una estrategia PreFilter, que aplica el filtrado escalar basado en el índice invertido antes de la búsqueda vectorial KNN, agregue el parámetro search_policy scalar a su consulta.

        También puede proporcionar el parámetro ivf_filter_count, que indica la cantidad máxima de registros que se recuperan del índice invertido durante la etapa de prefiltrado. El valor predeterminado es 10,000. Con la estrategia PreFilter, si la cantidad de registros que coinciden con el filtro escalar supera este valor, el sistema recurre a la estrategia PostFilter.

      Nota

      En la mayoría de los casos, estos parámetros predeterminados garantizan una latencia baja y mantienen una alta precisión. Puede ajustarlos para solicitudes específicas, pero tenga en cuenta que valores más altos pueden aumentar la latencia de la consulta.

Valor devuelto

  • Si la ejecución se completa correctamente, devuelve las key de los vecinos más cercanos y sus distancias al vector objetivo, ordenadas de menor a mayor distancia.

  • Si el índice vectorial especificado no existe, el comando devuelve un (empty array).

  • En los demás casos, devuelve un mensaje de error.

Ejemplos

Ejecute a continuación los siguientes comandos de manera previa:

TVS.CREATEINDEX my_index_k 2 HNSW L2 inverted_index_productname string
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730 productname "Aliyun"
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740 productname "other"
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750 productname "Aliyun"

Ejemplo 1:

TVS.KNNSEARCH my_index_k 2 [3,3.1] "creation_time > 1735"

Respuesta 1:

1) "key1"
2) "0.81000018119812012"
3) "key2"
4) "12.410000801086426"

Ejemplo 2:

TVS.KNNSEARCH my_index_k 2 [3,3.1]  "creation_time > 1735 && productname ==  \"Aliyun\"" search_policy scala ivf_filter_count 15000

Respuesta 2:

1) "key2"
2) "12.410000801086426"

TVS.KNNSEARCHFIELD

Elemento

Descripción

Sintaxis

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

Complejidad temporal

  • Algoritmo HNSW: O(log(N))

  • Algoritmo FLAT: O(N)

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

  • index_name: el nombre del índice vectorial.

  • topN: el número de resultados que se devolverán. El valor debe estar en el rango de [1, 10000].

  • vector: el vector de consulta para la búsqueda de vecinos más cercanos. Si solo desea ejecutar una búsqueda de texto completo en un índice híbrido, pase una cadena vacía ("") para este parámetro.

  • field_count: el número de atributos de etiqueta que se devolverán. Para devolver todos los atributos de etiqueta, establezca field_count en 0.

  • field_name: los nombres de los atributos de etiqueta que se devolverán. La cantidad de nombres debe coincidir con el valor de field_count.

  • filter_string: la condición de filtro. Para obtener más información, consulte TVS.KNNSEARCH.

  • param_key y param_value: los parámetros operativos de la consulta. Para obtener más información, consulte TVS.KNNSEARCH.

Valor devuelto

  • Si la ejecución es exitosa, este comando devuelve la key, la distancia respecto al vector de consulta y los pares clave-valor de los atributos de etiqueta de cada vecino más cercano. Los resultados se ordenan por distancia de forma ascendente.

  • Si el índice vectorial especificado no existe, devuelve (empty array).

  • En cualquier otro caso, devuelve un mensaje de error.

Ejemplo

Ejecute primero los siguientes comandos:

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

Comando de ejemplo:

TVS.KNNSEARCHFIELD my_index_k 2 [3,3.1] 0 "creation_time > 1735"

Salida de ejemplo:

1) 1) "key1"
   2) "0.81000018119812012"
   3) "VECTOR"
   4) "[3,4]"
   5) "creation_time"
   6) "1740"
2) 1) "key2"
   2) "12.410000801086426"
   3) "VECTOR"
   4) "[5,6]"
   5) "creation_time"
   6) "1750"

TVS.GETDISTANCE

Elemento

Descripción

Sintaxis

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

Complejidad temporal

  • Algoritmo HNSW: O(log N)

  • Algoritmo FLAT: O(N)

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

  • index_name: el nombre del índice vectorial.

  • vector: el vector de consulta.

  • key_count: el número de claves candidatas.

  • key: los nombres de las claves candidatas. La cantidad de claves debe coincidir con el valor de key_count.

  • TOPN: el número máximo de resultados que se devolverán. El valor predeterminado es key_count. El valor debe estar en el rango de [1, key_count].

  • FILTER: la condición de filtro.

    • Admite operadores como +-*/<>!=()&&||. No se admiten comparaciones de mayor o menor que para cadenas. Para incluir una cadena literal, debe escapar las comillas con una barra invertida (\). Por ejemplo: create_time > 1663637425 && location == \"Hangzhou\".

    • Los operadores deben separarse de sus operandos con espacios. Por ejemplo, "creation_time > 1735".

    • No se admiten comparaciones booleanas directas, como flag == true. En su lugar, compare el valor como una cadena: flag == \"true\".

  • MAX_DIST: filtra las claves cuya distancia respecto al vector de consulta supera este valor.

Salida

  • Devuelve las claves coincidentes y sus distancias. De forma predeterminada, los resultados se devuelven en el mismo orden en que se proporcionaron las claves. Si se especifica TOPN, el comando devuelve las topN claves más cercanas y sus distancias, ordenadas de la más cercana a la más lejana.

  • Devuelve (empty array) si el índice vectorial no existe.

  • Para cualquier otro error, se devuelve un mensaje de error.

Ejemplo

Ejecute primero los siguientes comandos:

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

Comando de ejemplo:

TVS.GETDISTANCE my_index_k [1,1] 2 key1 key2

Salida de ejemplo:

1) "key1"
2) "13"
3) "key2"
4) "41"

TVS.MKNNSEARCH

Elemento

Descripción

Sintaxis

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Complejidad temporal

  • Algoritmo HNSW: vector_count * O(log(N))

  • Algoritmo FLAT: vector_count * O(N)

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

  • index_name: el nombre del índice vectorial.

  • topN: el número de resultados que se devolverán por cada vector de consulta. El valor debe estar en el rango de [1, 10000].

  • vector_count : el número de vectores de consulta.

  • vector: uno o más vectores para la búsqueda de vecinos más cercanos. Si solo desea ejecutar una búsqueda de texto completo en un índice híbrido, pase "" para este parámetro.

  • filter_string: la condición de filtro. Para obtener más información, consulte la descripción en TVS.KNNSEARCH.

  • param_key y param_value: los parámetros de tiempo de ejecución de la consulta. Para obtener más información, consulte la descripción en TVS.KNNSEARCH.

Valor devuelto

  • Si la ejecución es exitosa, el comando devuelve varios arreglos de resultados, uno por cada vector de consulta. Cada arreglo contiene las keys de los vecinos más cercanos y sus distancias, ordenados de la más cercana a la más lejana.

  • Si el índice vectorial no existe, el comando devuelve (empty array).

  • En cualquier otro caso, el comando devuelve un mensaje de error.

Ejemplo

Ejecute previamente los siguientes comandos:

TVS.CREATEINDEX my_index_m 2 HNSW L2
TVS.HSET my_index_m key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_m key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_m key2 VECTOR [5,6] creation_time 1750

Comando de ejemplo:

TVS.MKNNSEARCH my_index_m 2 2 [3,4] [5,6] "creation_time > 1735"

Salida de ejemplo:

1) 1) "key1"
   2) "0"
   3) "key2"
   4) "8"
2) 1) "key2"
   2) "0"
   3) "key1"
   4) "8"

TVS.MINDEXKNNSEARCH

Elemento

Descripción

Sintaxis

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

Complejidad temporal

  • Algoritmo HNSW: index_count * O(log(N))

  • Algoritmo FLAT: index_count * O(N)

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

  • index_count: el número de índices vectoriales.

  • index_name: los nombres de los índices vectoriales.

  • topN: el número de vecinos más cercanos que se devolverán, de 1 a 10,000. El comando obtiene los primeros topN resultados de cada índice especificado, los agrega y devuelve los topN vecinos más cercanos generales del conjunto combinado.

  • vector: el vector de consulta para la búsqueda de vecinos más cercanos.

  • filter_string: las condiciones de filtro. Para obtener más información, consulte la descripción en TVS.KNNSEARCH.

  • param_key y param_value: los parámetros operativos de la consulta. Para obtener más información, consulte la descripción en TVS.KNNSEARCH.

Salida

  • Devuelve un arreglo con las keys de los vecinos más cercanos y sus distancias respecto al vector de consulta, ordenados de la más cercana a la más lejana.

  • Devuelve (empty array) si un índice vectorial especificado no existe.

  • En cualquier otro caso, devuelve un mensaje de error.

Ejemplo

Ejecute primero estos comandos:

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

Comando de ejemplo:

TVS.MINDEXKNNSEARCH 2 my_index_mk my_index_mx 2 [0,0]

Salida de ejemplo:

1) "key0"
2) "5"
3) "key7"
4) "25"

TVS.MINDEXKNNSEARCHFIELD

Categoría

Descripción

Sintaxis

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

Complejidad temporal

  • Algoritmo HNSW: index_count * O(log(N))

  • Algoritmo FLAT: index_count * O(N)

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

  • index_count: el número de índices vectoriales.

  • index_name: los nombres de los índices vectoriales.

  • topN: el número de vecinos más cercanos que se devolverán, de 1 a 10,000. El comando busca los topN vecinos más cercanos en cada índice vectorial, agrega estos resultados y luego devuelve los topN resultados generales con las distancias más cortas.

  • vector: el vector de entrada para la consulta de vecinos más cercanos.

  • field_count: el número de etiquetas que se devolverán. Para devolver todas las etiquetas, establezca field_count en 0.

  • field_name: los nombres de las etiquetas que se devolverán. La cantidad de nombres proporcionados debe coincidir con el valor de field_count.

  • filter_string: las condiciones de filtro. Para obtener más información, consulte TVS.KNNSEARCH.

  • param_key y param_value: los parámetros de tiempo de ejecución de la consulta. Para obtener más información, consulte TVS.KNNSEARCH.

Salida

  • Si la ejecución es exitosa, el comando devuelve las keys de los vecinos más cercanos, sus distancias respecto al vector de consulta y los pares clave-valor de sus etiquetas correspondientes. Los resultados se ordenan por distancia de forma ascendente.

  • Si un índice vectorial especificado no existe, el comando devuelve (empty array).

  • En cualquier otro caso, el comando devuelve un mensaje de error.

Ejemplo

Ejecute primero los siguientes comandos:

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

Comando de ejemplo:

TVS.MINDEXKNNSEARCHFIELD 2 my_index_mk my_index_mx 2 [0,0] 0

Salida de ejemplo:

1) 1) "key0"
   2) "5"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[1,2]"
   6) "creation_time"
   7) "1730"
2) 1) "key1"
   2) "25"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[3,4]"
   6) "creation_time"
   7) "1740"

TVS.MINDEXMKNNSEARCH

Elemento

Descripción

Sintaxis

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

Complejidad temporal

  • Algoritmo HNSW: index_count vector_count O(log(N))

  • Algoritmo FLAT: index_count vector_count O(N)

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

  • index_count: el número de índices vectoriales.

  • index_name: el nombre de un índice vectorial.

  • topN: el número de vecinos más cercanos que se devolverán por cada vector de consulta. El valor debe estar en el rango de [1, 10000]. De forma predeterminada, el comando obtiene los topN resultados de cada índice vectorial, los agrega y devuelve los topN resultados generales con las distancias más cortas.

  • vector_count: el número de vectores de consulta.

  • vector: un vector de consulta para la búsqueda de vecinos más cercanos.

  • filter_string: las condiciones de filtro. Para obtener más información, consulte TVS.KNNSEARCH.

  • param_key y param_value: los parámetros operativos de la consulta. Para obtener más información, consulte TVS.KNNSEARCH.

Valor devuelto

  • Si la ejecución es exitosa, devuelve un arreglo de arreglos de resultados en el mismo orden que los vectores de consulta. Cada arreglo de resultados contiene la key y la distancia de cada vecino más cercano, ordenados por distancia de la más cercana a la más lejana.

  • Si un índice vectorial especificado no existe, devuelve (empty array).

  • En otros casos, devuelve un mensaje de error.

Ejemplo

Ejecute primero estos comandos:

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

Comando de ejemplo:

TVS.MINDEXMKNNSEARCH 2 my_index_mk my_index_mx 2 2 [0,0] [3,3]

Salida de ejemplo:

1) 1) "key0"
   2) "5"
   3) "key7"
   4) "25"
2) 1) "key1"
   2) "1"
   3) "key7"
   4) "1"