Cómo utilizar los datos de cadenas para potenciar sus aplicaciones de búsqueda por similitud
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:
- 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.
- 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.VARCHAR
al 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",
)
Búsqueda híbrida
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 like
para 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:
- Cómo utilizar datos de cadenas para potenciar sus aplicaciones de búsqueda por similitud
- Uso de Milvus integrado para instalar y ejecutar Milvus con Python de forma instantánea
- Aumente el rendimiento de lectura de su base de datos vectorial con réplicas en memoria
- Comprender el nivel de consistencia en la base de datos vectorial Milvus
- Comprender el nivel de consistencia en la base de datos vectorial de Milvus (Parte II)
- ¿Cómo Garantiza la Seguridad de los Datos la Base de Datos Vectorial de Milvus?
- Crear una colección
- Insertar datos
- Borrar datos
- Construir un índice
- Búsqueda híbrida
- Expresiones de cadena
- Próximos pasos
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word