Travailler avec Milvus

Création d'une collection à Milvus

Dans Milvus, les collections sont utilisées pour stocker et gérer les entités. Dans Milvus, une collection équivaut à une table dans un système de gestion de base de données relationnelle (SGBDR).

Voir Créer une collection pour créer une collection dans Milvus.

Insérer des données dans Milvus

Milvus prend en charge les valeurs par défaut pour les champs scalaires, à l'exception des champs à clé primaire. Vous pouvez conserver certaines zones vides lors des insertions de données.

Pour plus d'informations, voir Insérer des entrées.

Il est recommandé d'insérer les données par lots pour les raisons suivantes :

  • Le nombre de vecteurs pouvant être ingérés dans un seul appel d'API GRPC est limité par la taille maximale du message autorisée parKafka. Dans IBM Cloud, la limite maximale de taille de message est limitée à 1 Mo.

  • Le nombre maximal de lignes pouvant être insérées à la fois dépend de la taille totale des données que vous tentez d'ingérer. Le nombre exact diminue avec l'augmentation des dimensions du vecteur et la présence de champs non-vecteurs dans la ligne.

Utilisez l'API d'insertion en bloc pour insérer les fichiers dont la taille est supérieure à 500 000 vecteurs. L'API d'insertion en bloc est plus performante que l'API d'insertion par lots lors de l'ingestion de jeux de données plus volumineux. L'utilisation de fichiers.npy est la méthode recommandée pour ingérer de grands ensembles de données. Si vous utilisez l'API d'insertion par lots, videz manuellement la collection toutes les 500 000 lignes. Pour plus d'informations, voir API d'insertion en masse.

Création d'index dans Milvus

Créez un index avant d'effectuer la recherche du plus proche voisin (ANN) à Milvus.

IBM prend officiellement en charge les index suivants:

Les index qui ne sont pas répertoriés dans cette liste peuvent fonctionner, mais ne sont pas validés par IBM.

Lorsque le nombre de lignes d'un segment est inférieur à 1024, Milvus ne crée pas d'index pour ce segment. Au lieu de cela, il utilisera par défaut la recherche brute-force pour les opérations d'interrogation. Lorsque le nombre de lignes dans le segment dépasse ce seuil, Milvus commence automatiquement à construire les index.

  • Serveur HNSW
  • SCANN
  • FLAT
  • IVF_FLAT
  • IVF_PQ

Vous pouvez créer l'index en spécifiant le nom de la zone de vecteur et les paramètres d'index. Pour plus d'informations, voir Champs de vecteurs d'indexation.

Effectuer une recherche de similarité vectorielle dans Milvus

Dans Milvus, vous pouvez effectuer une recherche de similarité vectorielle après avoir préparé les paramètres de votre scénario de recherche.

Effectuer une requête basée sur le filtrage scalaire dans Milvus

Dans Milvus, vous pouvez effectuer une requête basée sur un filtrage scalaire. Pour plus d'informations, voir Obtenir et requête scalaire.

Vous pouvez effectuer les types de recherche suivants :

  • Recherche de plage : pour trouver des vecteurs dans une plage de distance spécifique à partir du vecteur de requête. Pour plus d'informations, voir Recherche de plage.
  • Recherche de regroupement : pour obtenir des résultats basés sur un domaine spécifique afin de garantir la diversité des résultats. Pour plus d'informations, voir Recherche de regroupement.

Lors de l'exécution d'une requête de recherche avec filtrage scalaire sur un ensemble de données volumineux, il est important d'ajuster le paramètre de limite pour gérer efficacement les résultats de requête. Utilisez l'approche suivante pour définir le limit paramètre:

hello_milvus.query(expr=query_condition, output_fields=["random", "embeddings"], limit=100,offset=0)

La somme des valeurs de limit et offset les paramètres doivent être dans la plage de[ 1, 16384] .

Suppression d'entités de Milvus à l'aide d'une clé primaire

Dans Milvus, vous pouvez supprimer les entités en utilisant la clé primaire. Préparez l'expression booléenne qui filtre les entités à supprimer.

Pour plus d'informations, voir Supprimer des entités.

Déposer une collection de Milvus

L'abandon d'une collection de Milvus est irréversible. Vous ne pouvez pas récupérer les données supprimées.

Ajoutez ce qui suit à votre script .ipynb ou Python pour déposer une collection...

from pymilvus import utility
utility.drop_collection(<collection name>)

Meilleures pratiques

Voici quelques bonnes pratiques :

  • Si les champs Varchar sont longs (plus de 256 caractères), conservez les champs non vectoriels en dehors de Milvus. Vous pouvez les conserver dans un bucket COS ou un bucket de stockage et effectuer une recherche référentielle.
  • Assurez-vous que lePyMilvus la version est2.4.0 ou plus tard. Milvus 2.4.0 ou les versions ultérieures prennent en charge la recherche de vecteurs épars, la recherche hybride ( sparse_dense ) et la recherche de vecteurs multiples.
  • Lors du chargement des collections à l'aide de l'insertion par lots, suivez le modèle : insérez dans un lot, libérez la mémoire, puis répétez le processus.
  • N'ingérez pas en parallèle toutes les collections en même temps. Ingérer de manière séquentielle et rincer entre les ingérations.
  • La taille maximale de chaque collection doit correspondre au nombre maximum de vecteurs pris en charge dans une taille de T-shirt.
  • Si plusieurs collections ou partitions sont chargées, assurez-vous que la somme des vecteurs de toutes les entités chargées ne dépasse pas la limite de la taille du T-shirt. Vous pouvez toujours stocker plus de vecteurs que la limite de taille de T-shirt tant que le nombre de vecteurs chargés reste dans la limite.

Lors de la mise à jour de Milvus, il peut y avoir un léger délai de réponse d'environ 20 secondes. Les recherches en cours et les requêtes d'insertion peuvent échouer. Vous pouvez réessayer les requêtes immédiatement.

Carnets d'échantillons pour Milvus

Ces carnets d'échantillons vous permettent de tester les capacités d' Milvus, grâce à des tutoriels étape par étape. Pour accéder aux carnets d'échantillons, voir Carnets d'échantillons d' Milvus.