Este capítulo introduce cómo comenzar rápidamente el desarrollo con Milvus usando Python.

Al ejecutar el código de ejemplo que proporcionamos, obtendrás una comprensión inicial de las funciones de Milvus.

Requisitos de versión

  • Milvus 2.3.0
  • Python 3 (3.7.1 o superior)
  • PyMilvus 2.3.x

Instalar Milvus Python SDK

python3 -m pip install pymilvus==

Descargar código de ejemplo

Usa el siguiente comando para descargar directamente hello_milvus.py o usa el siguiente comando para descargar.

$ wget https://www.tizi365.com/storage/hello_milvus.py

Explicación del código de ejemplo

El código de ejemplo realiza los siguientes pasos.

  • Importar el paquete PyMilvus:
from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)
  • Conectar al servidor:
connections.connect("default", host="localhost", port="19530")
  • Crear una colección:
fields = [
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="random", dtype=DataType.DOUBLE),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8)
]
schema = CollectionSchema(fields, "hello_milvus es el ejemplo más simple, utilizado para introducir la API")
hello_milvus = Collection("hello_milvus", schema)
  • Insertar vectores en la colección:
import random
entities = [
    [i for i in range(3000)],  # campo pk
    [float(random.randrange(-20, -10)) for _ in range(3000)],  # campo random
    [[random.random() for _ in range(8)] for _ in range(3000)],  # campo embeddings
]
insert_result = hello_milvus.insert(entities)
hello_milvus.flush()
  • Crear un índice en las entidades:
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
  • Cargar la colección en la memoria y realizar una búsqueda de similitud de vectores:
hello_milvus.load()
vectors_to_search = entities[-1][-2:]
search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10},
}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"])
  • Realizar consultas de vectores:
result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
  • Realizar búsqueda mixta:
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])
  • Eliminar entidades basadas en la clave primaria:
expr = f"pk in [{entities[0][0]}, {entities[0][1]}]"
hello_milvus.delete(expr)
  • Eliminar la colección:
utility.drop_collection("hello_milvus")

Ejecutando el código de muestra

Ejecuta el siguiente comando para ejecutar el código de muestra.

$ python3 hello_milvus.py

Abajo se muestran los resultados devueltos y la latencia de la consulta:

=== Conexión a Milvus ===

¿Existe la colección llamada hello_milvus en Milvus?: Falso

=== Creando la colección `hello_milvus` ===

=== Inserción de entidades ===

Número de entidades en Milvus: 3000

=== Creando índice IVF_FLAT ===

=== Carga ===

=== Búsqueda basada en similitud de vectores ===

Coincidencia: (Distancia: 0.0, ID: 2998), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.11455299705266953, ID: 1581), Campo Aleatorio: -18.0
Coincidencia: (Distancia: 0.1232629269361496, ID: 2647), Campo Aleatorio: -13.0
Coincidencia: (Distancia: 0.0, ID: 2999), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.10560893267393112, ID: 2430), Campo Aleatorio: -18.0
Coincidencia: (Distancia: 0.13938161730766296, ID: 377), Campo Aleatorio: -14.0
Latencia de la búsqueda = 0.2796 segundos

=== Consulta utilizando `random > -14` ===

Resultado de la consulta:
-{'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
Latencia de la búsqueda = 0.2970 segundos

=== Realización de búsqueda mixta utilizando `random > -12` ===

Coincidencia: (Distancia: 0.0, ID: 2998), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.15773043036460876, ID: 472), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.3273330628871918, ID: 2146), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.0, ID: 2999), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.15844076871871948, ID: 2218), Campo Aleatorio: -11.0
Coincidencia: (Distancia: 0.1622171700000763, ID: 1403), Campo Aleatorio: -11.0
Latencia de la búsqueda = 0.3028 segundos

=== Eliminación utilizando la expresión `pk in [0, 1]` ===

Consulta antes de la eliminación basada en la expresión `pk in [0, 1]` -> Resultado:
-{'pk': 0, 'random': -18.0, 'embeddings': [0.142279, 0.414248, 0.378628, 0.971863, 0.535941, 0.107011, 0.207052, 0.98182]}
-{'pk': 1, 'random': -15.0, 'embeddings': [0.57512, 0.358512, 0.439131, 0.862369, 0.083284, 0.294493, 0.004961, 0.180082]}

Consulta después de la eliminación basada en la expresión `pk in [0, 1]` -> Resultado: []

=== Eliminando la colección `hello_milvus` ===