Requête conditionnelle
Ce sujet présente comment effectuer des requêtes conditionnelles.
Contrairement aux recherches de similarité sur des vecteurs, les requêtes conditionnelles récupèrent des vecteurs en utilisant des filtres scalaires à travers des expressions booléennes. Milvus prend en charge la requête sur les champs scalaires et les différentes expressions booléennes. Les expressions booléennes peuvent être utilisées pour filtrer les champs scalaires ou les champs de clé primaire afin de récupérer tous les résultats qui correspondent aux conditions de filtrage.
L'exemple suivant démontre comment interroger un ensemble de données de 2000 lignes de livres, comprenant l'ID du livre (clé primaire), le nombre de mots (champ scalaire) et l'introduction du livre (champ vectoriel), simulant le scénario de l'interrogation d'un livre spécifique basé sur son ID.
Chargement de la collection
Avant de procéder à une requête, la collection doit être chargée en mémoire.
from pymilvus import Collection
collection = Collection("book") # Obtenir une collection existante.
collection.load()
Effectuer une requête
L'exemple suivant filtre les vecteurs basés sur des valeurs spécifiques de book_id
et renvoie le champ book_id
et le champ book_intro
dans les résultats.
Milvus prend en charge le paramétrage des niveaux de cohérence pour les requêtes. L'exemple de ce sujet définit le niveau de cohérence sur Fort
. Vous pouvez également définir le niveau de cohérence sur Borné
, Session
ou Finalement
. Pour plus d'informations sur les quatre niveaux de cohérence dans Milvus, veuillez consulter la Cohérence.
Vous pouvez également utiliser des champs dynamiques dans l'expression de filtre et spécifier les champs de sortie dans la requête. Par exemple, consultez Schéma dynamique.
res = collection.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
Paramètre | Description |
---|---|
expr |
Expression booléenne utilisée pour filtrer les propriétés. Pour plus de détails sur les règles des expressions booléennes, veuillez consulter Règles des expressions booléennes. |
limit |
Nombre de résultats les plus similaires à renvoyer. La somme de cette valeur et de offset devrait être inférieure à 16384. |
offset |
Nombre de résultats à ignorer dans la collection. Disponible uniquement lorsque limit est spécifié, et la somme de cette valeur et de limit devrait être inférieure à 16384. Par exemple, si vous voulez interroger les 9e et 10e voisins les plus proches d'un vecteur, définissez limit sur 2 , et offset sur 8 . |
output_fields (optionnel) |
Liste des noms de champs à renvoyer. |
partition_names (optionnel) |
Liste des noms de partition à interroger. |
consistency_level (optionnel) |
Niveau de cohérence pour la requête. |
Vérifiez les résultats retournés.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
Compter les entités
Lors de l'exécution d'une requête, vous pouvez ajouter count(*)
dans output_fields
afin que Milvus puisse renvoyer le nombre d'entités dans la collection. Si vous souhaitez compter le nombre d'entités qui répondent à des conditions spécifiques, utilisez expr
pour définir une expression booléenne.
Compter toutes les entités dans la collection :
res = collection.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Compter le nombre d'entités qui répondent à des conditions de filtrage spécifiques :
res = collection.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Limitations
Lors de l'utilisation de count(*)
dans output_fields
, l'utilisation du paramètre limit
est interdite.