Primärschlüssel-SucheCompatible with Milvus 2.6.9+
Bei der Durchführung von Ähnlichkeitssuchen werden Sie immer aufgefordert, einen oder mehrere Abfragevektoren anzugeben, auch wenn die Abfragevektoren bereits in der Zielsammlung vorhanden sind. Um das Abrufen von Vektoren vor der Suche zu vermeiden, können Sie stattdessen Primärschlüssel verwenden.
Übersicht
Auf E-Commerce-Plattformen können Benutzer ein Schlüsselwort eingeben, um Produkte abzurufen, die diesem Schlüsselwort entsprechen. Sobald der Benutzer eine Produktdetailseite aufruft, zeigt die Plattform unten auf der Seite auch eine Liste ähnlicher Produkte an, die der Benutzer vergleichen möchte.
Die Empfehlungen werden nach ihrer Ähnlichkeit mit dem Stichwort oder dem aktuellen Produkt sortiert. Um dies zu erreichen, müssen die Entwickler der Plattform vor der eigentlichen Ähnlichkeitssuche die Vektordarstellung des Schlüsselworts oder des aktuellen Produkts von Milvus abrufen, was den Round-Trip zwischen der Plattform und Milvus erhöht und dazu führt, dass eine große Anzahl hochdimensionaler Floats über das Netzwerk übertragen wird.
Um die Interaktionslogik zwischen Ihren Anwendungen und Milvus zu vereinfachen, die Anzahl der Roundtrips zu reduzieren und die Übertragung großer Mengen hochdimensionaler Fließkommawerte über das Netzwerk zu vermeiden, sollten Sie die Verwendung von Primärschlüsselsuchen in Betracht ziehen.
Bei einer Primärschlüsselsuche müssen Sie keine Abfragevektoren bereitstellen. Stattdessen werden Sie aufgefordert, die Primärschlüssel (ids) der Entitäten anzugeben, die die Abfragevektoren enthalten.
Grenzen und Einschränkungen
Die Suche mit Primärschlüsseln gilt für alle Vektordatentypen, mit Ausnahme von Sparse-Vektorfeldern, die von VarChar-Feldern abgeleitet sind, wie in BM25-Funktionen.
Sie können Primärschlüssel anstelle von Abfragevektoren in gefilterten, Bereichs- und Gruppierungssuchen verwenden, optional mit aktivierter Paginierung. Diese Funktion gilt jedoch nicht für hybride Suchen und Such-Iteratoren.
Bei Ähnlichkeitssuchen mit Einbettungslisten müssen Sie weiterhin die Abfragevektoren abrufen, sie in Einbettungslisten anordnen und die Suchen ausführen.
Sie können keine Primärschlüssel anstelle von Abfragevektoren in RESTful-APIs verwenden.
Bei nicht existierenden Primärschlüsseln oder solchen in einem falschen Format gibt Milvus eine Fehlermeldung aus.
Primärschlüssel und Abfragevektoren schließen sich gegenseitig aus. Die Angabe von beiden führt ebenfalls zu Fehlern.
Beispiele
Die folgenden Beispiele gehen davon aus, dass alle angegebenen Int64-IDs in der Zielsammlung vorhanden sind.
Die Primärschlüssel werden nicht zum Filtern, sondern nur zum Abrufen von Vektoren verwendet.
Beispiel 1: Einfache Primärschlüsselsuche
Um eine einfache Primärschlüsselsuche durchzuführen, ersetzen Sie einfach die Abfragevektoren durch Primärschlüssel.
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
Beispiel 2: Gefilterte Suche mit Primärschlüsseln
Das folgende Beispiel geht davon aus, dass color und likes zwei schema-definierte Felder in der Zielsammlung sind.
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
Beispiel 3: Bereichssuche mit Primärschlüsseln
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
Beispiel 4: Gruppierungssuche mit Primärschlüsseln
Das folgende Beispiel geht davon aus, dass docId ein schema-definiertes Feld in der Zielsammlung ist.
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