Ce chapitre présente comment démarrer rapidement le développement avec Milvus en utilisant Python.

En exécutant le code d'exemple que nous fournissons, vous aurez une compréhension préliminaire des fonctions de Milvus.

Configuration requise

  • Milvus 2.3.0
  • Python 3 (3.7.1 ou version ultérieure)
  • PyMilvus 2.3.x

Installer Milvus Python SDK

python3 -m pip install pymilvus==

Télécharger le code d'exemple

Utilisez la commande suivante pour télécharger directement hello_milvus.py ou utilisez la commande suivante pour le téléchargement.

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

Explication du code d'exemple

Le code d'exemple effectue les étapes suivantes.

  • Importer le package PyMilvus :
from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)
  • Se connecter au serveur :
connections.connect("default", host="localhost", port="19530")
  • Créer une collection :
champs = [
    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(champs, "hello_milvus est le demo le plus simple, utilisé pour présenter l'API")
hello_milvus = Collection("hello_milvus", schema)
  • Insérer des vecteurs dans la collection :
import random
entités = [
    [i for i in range(3000)],  # champ pk
    [float(random.randrange(-20, -10)) for _ in range(3000)],  # champ random
    [[random.random() for _ in range(8)] for _ in range(3000)],  # champ embeddings
]
resultat_insertion = hello_milvus.insert(entités)
hello_milvus.flush()
  • Créer un index sur les entités :
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
  • Charger la collection en mémoire et effectuer une recherche de similarité vectorielle :
hello_milvus.load()
vecteurs_recherchés = entités[-1][-2:]
paramètres_recherche = {
    "metric_type": "L2",
    "params": {"nprobe": 10},
}
résultat = hello_milvus.search(vecteurs_recherchés, "embeddings", paramètres_recherche, limit=3, output_fields=["random"])
  • Effectuer des requêtes vectorielles :
résultat = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
  • Effectuer une recherche mixte :
résultat = hello_milvus.search(vecteurs_recherchés, "embeddings", paramètres_recherche, limit=3, expr="random > -12", output_fields=["random"])
  • Supprimer des entités en fonction de la clé primaire :
expr = f"pk in [{entités[0][0]}, {entités[0][1]}]"
hello_milvus.delete(expr)
  • Supprimer la collection :
utility.drop_collection("hello_milvus")

Exécution du code d'exemple

Exécutez la commande suivante pour exécuter le code d'exemple.

$ python3 hello_milvus.py

Voici les résultats retournés et la latence de la requête:

=== Connexion à Milvus ===

Est-ce que la collection nommée hello_milvus existe dans Milvus : Faux

=== Création de la collection `hello_milvus` ===

=== Insertion des entités ===

Nombre d'entités dans Milvus : 3000

=== Création de l'index IVF_FLAT ===

=== Chargement ===

=== Recherche basée sur la similarité vectorielle ===

Correspondance : (Distance : 0.0, ID : 2998), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.11455299705266953, ID : 1581), Champ Aléatoire : -18.0
Correspondance : (Distance : 0.1232629269361496, ID : 2647), Champ Aléatoire : -13.0
Correspondance : (Distance : 0.0, ID : 2999), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.10560893267393112, ID : 2430), Champ Aléatoire : -18.0
Correspondance : (Distance : 0.13938161730766296, ID : 377), Champ Aléatoire : -14.0
Latence de la recherche = 0.2796 secondes

=== Requête à l'aide de `random > -14` ===

Résultat de la requête :
-{'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
Latence de la recherche = 0.2970 secondes

=== Recherche mixte à l'aide de `random > -12` ===

Correspondance : (Distance : 0.0, ID : 2998), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.15773043036460876, ID : 472), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.3273330628871918, ID : 2146), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.0, ID : 2999), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.15844076871871948, ID : 2218), Champ Aléatoire : -11.0
Correspondance : (Distance : 0.1622171700000763, ID : 1403), Champ Aléatoire : -11.0
Latence de la recherche = 0.3028 secondes

=== Suppression à l'aide de l'expression `pk in [0, 1]` ===

Requête avant la suppression basée sur l'expression `pk in [0, 1]` -> Résultat :
-{'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]}

Requête après la suppression basée sur l'expression `pk in [0, 1]` -> Résultat : []

=== Suppression de la collection `hello_milvus` ===