Recherche par clé primaireCompatible with Milvus 2.6.9+
Lorsque vous effectuez des recherches de similarité, il vous est toujours demandé de fournir un ou plusieurs vecteurs d'interrogation, même si ces vecteurs sont déjà présents dans la collection cible. Pour éviter de récupérer les vecteurs avant la recherche, vous pouvez utiliser des clés primaires.
Vue d'ensemble
Sur les plateformes de commerce électronique, les utilisateurs peuvent saisir un mot-clé pour retrouver les produits qui y correspondent. Lorsque l'utilisateur consulte la page détaillée d'un produit, la plateforme affiche également une liste de produits similaires au bas de la page pour les utilisateurs qui souhaitent les comparer.
Les recommandations sont triées en fonction de leur similitude avec le mot-clé ou le produit actuel. Pour ce faire, les développeurs de la plate-forme doivent récupérer la représentation vectorielle du mot-clé ou du produit actuel auprès de Milvus avant la recherche de similarité proprement dite, ce qui augmente les allers-retours entre la plate-forme et Milvus et entraîne la transmission d'un grand nombre de flottants à haute dimension sur le réseau.
Pour simplifier la logique d'interaction entre vos applications et Milvus, réduire le nombre d'allers-retours et éviter de transmettre de grandes quantités de valeurs flottantes à haute dimension sur le réseau, envisagez d'utiliser des recherches par clé primaire.
Dans une recherche par clé primaire, il n'est pas nécessaire de fournir des vecteurs d'interrogation. En revanche, il vous est demandé de fournir les clés primaires (ids) des entités qui contiennent les vecteurs d'interrogation.
Limites et restrictions
Les recherches utilisant des clés primaires s'appliquent à tous les types de données vectorielles, à l'exception des champs vectoriels peu denses dérivés des champs VarChar, comme dans les fonctions BM25.
Vous pouvez utiliser des clés primaires à la place des vecteurs d'interrogation dans les recherches filtrées, les recherches par plage et les recherches par regroupement, éventuellement avec une pagination activée. Toutefois, cette fonctionnalité ne s'applique pas aux recherches hybrides et aux itérateurs de recherche.
Pour les recherches de similarité impliquant des listes d'intégration, vous devez toujours récupérer les vecteurs de requête, les organiser en listes d'intégration et exécuter les recherches.
Vous ne pouvez pas utiliser de clés primaires à la place des vecteurs de requête dans les API RESTful.
En cas de clés primaires inexistantes ou au format incorrect, Milvus affichera des erreurs.
Les clés primaires et les vecteurs de requête s'excluent mutuellement. Fournir les deux entraîne également des erreurs.
Exemples
Les exemples suivants supposent que tous les ID Int64 fournis sont disponibles dans la collection cible.
Les clés primaires ne sont pas utilisées pour le filtrage, mais uniquement pour la recherche de vecteurs.
Exemple 1 : Recherche de base par clé primaire
Pour effectuer une recherche de base par clé primaire, il suffit de remplacer les vecteurs de la requête par des clés primaires.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.search(
collection_name="quick_setup",
anns_field="vector",
ids=[551, 296, 43], # a list of primary keys
limit=3,
search_params={"metric_type": "IP"}
)
for hits in res:
for hit in hits:
print(hit)
// java
// node.js
// go
# restful
Exemple 2 : Recherche filtrée à l'aide de clés primaires
L'exemple suivant suppose que color et likes sont deux champs définis par le schéma dans la collection cible.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43], #
filter='color like "red%" and likes > 50',
output_fields=["color", "likes"],
limit=3,
)
// java
// node.js
// go
# restful
Exemple 3 : Recherche par plage à l'aide de clés primaires
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
search_params={
"params": {
"radius": 0.4,
"range_filter": 0.6
}
}
)
// java
// node.js
// go
# restful
Exemple 4 : Recherche de groupes à l'aide de clés primaires
L'exemple suivant suppose que docId est un champ défini par le schéma dans la collection cible.
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
group_by_field="docId",
output_fields=["docId"]
)
// java
// node.js
// go
# restful