🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Cómo utilizar los datos de cadenas para potenciar sus aplicaciones de búsqueda por similitud

Cómo utilizar los datos de cadenas para potenciar sus aplicaciones de búsqueda por similitud

  • Engineering
August 08, 2022
Xi Ge

Cover Portada

Milvus 2.1 viene con algunas actualizaciones significativas que hacen que trabajar con Milvus sea mucho más fácil. Una de ellas es el soporte del tipo de datos cadena. Actualmente Milvus soporta tipos de datos que incluyen cadenas, vectores, booleanos, enteros, números de punto flotante y más.

Este artículo presenta una introducción al soporte del tipo de datos string. Lea y aprenda qué puede hacer con él y cómo utilizarlo.

Ir a:

El soporte del tipo de datos cadena ha sido una de las funciones más esperadas por los usuarios. Agiliza el proceso de creación de una aplicación con la base de datos vectorial Milvus y acelera la velocidad de búsqueda de similitudes y de consulta vectorial, aumentando en gran medida la eficiencia y reduciendo el coste de mantenimiento de cualquier aplicación en la que esté trabajando.

En concreto, Milvus 2.1 soporta el tipo de datos VARCHAR, que almacena cadenas de caracteres de longitud variable. Con el soporte del tipo de datos VARCHAR, usted puede:

  1. Gestionar directamente datos de cadenas sin la ayuda de una base de datos relacional externa.

El soporte del tipo de datos VARCHAR le permite omitir el paso de convertir cadenas en otros tipos de datos al insertar datos en Milvus. Supongamos que está trabajando en un sistema de búsqueda de libros para su propia librería en línea. Está creando un conjunto de datos de libros y desea identificar los libros con sus nombres. Mientras que en versiones anteriores Milvus no soportaba el tipo de datos cadena, antes de insertar datos en MIilvus, puede que necesite transformar primero las cadenas (los nombres de los libros) en IDs de libros con la ayuda de una base de datos relacional como MySQL. En este momento, como se admite el tipo de datos de cadena, puede simplemente crear un campo de cadena e introducir directamente los nombres de los libros en lugar de sus números de identificación.

La comodidad se extiende también al proceso de búsqueda y consulta. Imagine que hay un cliente cuyo libro favorito es Hello Milvus. Usted quiere buscar en el sistema libros similares y recomendárselos al cliente. En versiones anteriores de Milvus, el sistema sólo le devolverá los ID de los libros y tendrá que dar un paso más para comprobar la información del libro correspondiente en una base de datos relacional. Pero en Milvus 2.1, puede obtener directamente los nombres de los libros porque ya ha creado un campo de cadena con los nombres de los libros.

En una palabra, el soporte del tipo de datos cadena le ahorra el esfuerzo de recurrir a otras herramientas para gestionar datos cadena, lo que simplifica enormemente el proceso de desarrollo.

  1. Acelere la velocidad de la búsqueda híbrida y la consulta vectorial mediante el filtrado de atributos.

Al igual que otros tipos de datos escalares, VARCHAR puede utilizarse para el filtrado de atributos en la búsqueda híbrida y la consulta vectorial mediante expresiones booleanas. Merece la pena mencionar que Milvus 2.1 añade el operador like, que le permite realizar correspondencias de prefijos. También puede realizar correspondencias exactas utilizando el operador ==.

Además, se admite un índice invertido basado en MARISA-trie para acelerar la búsqueda y la consulta híbridas. Continúe leyendo y descubra todas las expresiones de cadena que puede desear conocer para realizar el filtrado de atributos con datos de cadena.

Ahora sabemos que el tipo de datos string es extremadamente útil, pero ¿cuándo necesitamos exactamente utilizar este tipo de datos para crear nuestras propias aplicaciones? A continuación, verá algunos ejemplos de código de escenarios que pueden implicar datos de cadena, lo que le dará una mejor comprensión de cómo gestionar datos VARCHAR en Milvus 2.1.

Crear una colección

Sigamos con el ejemplo anterior. Sigue trabajando en el sistema de recomendación de libros y desea crear una colección de libros con un campo de clave primaria llamado book_name, en el que insertará datos de cadena. En este caso, puede establecer el tipo de datos como DataType.VARCHARal configurar el esquema del campo, como se muestra en el ejemplo siguiente.

Tenga en cuenta que al crear un campo VARCHAR, es necesario especificar la longitud máxima de caracteres mediante el parámetro max_length cuyo valor puede oscilar entre 1 y 65.535. En este ejemplo, fijamos la longitud máxima en 200.

from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
  name="book_id", 
  dtype=DataType.INT64, 
)
book_name = FieldSchema( 
  name="book_name", 
  dtype=DataType.VARCHAR, 
  max_length=200, 
  is_primary=True, 
)
word_count = FieldSchema(
  name="word_count", 
  dtype=DataType.INT64,  
)
book_intro = FieldSchema(
  name="book_intro", 
  dtype=DataType.FLOAT_VECTOR, 
  dim=2
)
schema = CollectionSchema(
  fields=[book_id, word_count, book_intro], 
  description="Test book search"
)
collection_name = "book"

Insertar datos

Ahora que la colección está creada, podemos insertar datos en ella. En el siguiente ejemplo, insertamos 2.000 filas de datos de cadena generados aleatoriamente.

import random
data = [
  [i for i in range(2000)],
  ["book_" + str(i) for i in range(2000)],
  [i for i in range(10000, 12000)],
  [[random.random() for _ in range(2)] for _ in range(2000)],
]

Borrar datos

Suponga que dos libros, llamados book_0 y book_1, ya no están disponibles en su tienda, por lo que desea eliminar la información relevante de su base de datos. En este caso, puede utilizar la expresión de términos in para filtrar las entidades a eliminar, como se muestra en el siguiente ejemplo.

Recuerde que Milvus sólo admite la eliminación de entidades con claves primarias claramente especificadas, por lo que antes de ejecutar el código siguiente, asegúrese de que ha establecido el campo book_name como campo de clave primaria.

expr = "book_name in [\"book_0\", \"book_1\"]" 
from pymilvus import Collection
collection = Collection("book")     
collection.delete(expr)

Construir un índice

Milvus 2.1 soporta la construcción de índices escalares, lo que acelerará enormemente el filtrado de campos de cadena. A diferencia de la construcción de un índice vectorial, no tiene que preparar parámetros antes de construir un índice escalar. Milvus sólo admite temporalmente el índice de árbol de diccionario (MARISA-trie), por lo que el tipo de índice del campo de tipo VARCHAR es MARISA-trie por defecto.

Puede especificar el nombre del índice al construirlo. Si no se especifica, el valor por defecto de index_name es "_default_idx_". En el ejemplo siguiente, hemos llamado al índice scalar_index.

from pymilvus import Collection
collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)

Especificando expresiones booleanas, puede filtrar los campos de cadena durante una búsqueda de similitud vectorial.

Por ejemplo, si busca los libros cuya introducción es más parecida a Hola Milvus pero sólo desea obtener los libros cuyos nombres empiezan por "libro_2", puede utilizar el operador likepara realizar una coincidencia de prefijos y obtener los libros buscados, como se muestra en el ejemplo siguiente.

search_param = {
  "data": [[0.1, 0.2]],
  "anns_field": "book_intro",
  "param": {"metric_type": "L2", "params": {"nprobe": 10}},
  "limit": 2,
  "expr": "book_name like \"Hello%\"",
}
res = collection.search(**search_param)

Expresiones de cadena

Aparte del nuevo operador like, también pueden utilizarse otros operadores, que ya se admitían en versiones anteriores de Milvus, para filtrar campos de cadena. A continuación se muestran algunos ejemplos de expresiones de cadena de uso común, donde A representa un campo de tipo VARCHAR. Recuerde que todas las expresiones de cadena que aparecen a continuación pueden combinarse lógicamente utilizando operadores lógicos, como AND, OR y NOT.

Operaciones de conjunto

Puede utilizar in y not in para realizar operaciones de conjunto, como A in ["str1", "str2"].

Comparación de dos campos de cadena

Puede utilizar operadores relacionales para comparar los valores de dos campos de cadena. Dichos operadores relacionales incluyen ==, !=, >, >=, <, <=. Para obtener más información, consulte Operadores relacionales.

Tenga en cuenta que los campos de cadena sólo pueden compararse con otros campos de cadena y no con campos de otros tipos de datos. Por ejemplo, un campo de tipo VARCHAR no puede compararse con un campo de tipo booleano o de tipo entero.

Comparar un campo con un valor constante

Puede utilizar == o != para comprobar si el valor de un campo es igual a un valor constante.

Filtrar campos con un único rango

Puede utilizar >, >=, <, <= para filtrar campos de cadena con un único rango, como A > "str1".

Coincidencia de prefijos

Como ya se ha mencionado, Milvus 2.1 añade el operador like para la concordancia de prefijos, como A like "prefix%".

Próximos pasos

Con el lanzamiento oficial de Milvus 2.1, hemos preparado una serie de blogs presentando las nuevas características. Lea más en esta serie de blogs:

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Sigue Leyendo