Questo capitolo introduce come iniziare rapidamente lo sviluppo con Milvus utilizzando Python.

Eseguendo il codice di esempio che forniamo, avrai una comprensione preliminare delle funzioni di Milvus.

Requisiti di Versione

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

Installazione Milvus Python SDK

python3 -m pip install pymilvus==

Scarica il Codice di Esempio

Usa il seguente comando per scaricare direttamente hello_milvus.py o utilizza il seguente comando per il download.

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

Spiegazione del Codice di Esempio

Il codice di esempio esegue i seguenti passaggi.

  • Importa il pacchetto PyMilvus:
from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)
  • Connettersi al server:
connections.connect("default", host="localhost", port="19530")
  • Crea una collezione:
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 è l'esempio demo più semplice, utilizzato per introdurre l'API")
hello_milvus = Collection("hello_milvus", schema)
  • Inserisci vettori nella collezione:
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()
  • Crea un indice sulle entità:
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
  • Carica la collezione in memoria e esegui la ricerca di similarità vettoriale:
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"])
  • Esegui query vettoriali:
result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
  • Esegui una ricerca mista:
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])
  • Elimina entità basate sulla chiave primaria:
expr = f"pk in [{entities[0][0]}, {entities[0][1]}]"
hello_milvus.delete(expr)
  • Elimina la collezione:
utility.drop_collection("hello_milvus")

Esecuzione del codice di esempio

Esegui il comando seguente per eseguire il codice di esempio.

$ python3 hello_milvus.py

Di seguito vengono mostrati i risultati restituiti e la latenza delle query:

=== Connessione a Milvus ===

Esiste la collezione chiamata hello_milvus in Milvus: Falso

=== Creazione della collezione `hello_milvus` ===

=== Inserimento entità ===

Numero di entità in Milvus: 3000

=== Creazione dell'indice IVF_FLAT ===

=== Caricamento ===

=== Ricerca basata sulla similarità vettoriale ===

Corrispondenza: (Distanza: 0.0, ID: 2998), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.11455299705266953, ID: 1581), Campo casuale: -18.0
Corrispondenza: (Distanza: 0.1232629269361496, ID: 2647), Campo casuale: -13.0
Corrispondenza: (Distanza: 0.0, ID: 2999), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.10560893267393112, ID: 2430), Campo casuale: -18.0
Corrispondenza: (Distanza: 0.13938161730766296, ID: 377), Campo casuale: -14.0
Latenza di ricerca = 0.2796 secondi

=== Query utilizzando `random > -14` ===

Risultato della query:
-{'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
Latenza di ricerca = 0.2970 secondi

=== Esecuzione della ricerca mista utilizzando `random > -12` ===

Corrispondenza: (Distanza: 0.0, ID: 2998), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.15773043036460876, ID: 472), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.3273330628871918, ID: 2146), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.0, ID: 2999), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.15844076871871948, ID: 2218), Campo casuale: -11.0
Corrispondenza: (Distanza: 0.1622171700000763, ID: 1403), Campo casuale: -11.0
Latenza di ricerca = 0.3028 secondi

=== Eliminazione utilizzando l'espressione `pk in [0, 1]` ===

Query prima dell'eliminazione basata sull'espressione `pk in [0, 1]` -> Risultato:
-{'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]}

Query dopo l'eliminazione basata sull'espressione `pk in [0, 1]` -> Risultato: []

=== Eliminazione della collezione `hello_milvus` ===