Milvus
Zilliz
Casa
  • Guida per l'utente
  • Home
  • Docs
  • Guida per l'utente

  • Ricerca

  • Ricerca con chiave primaria

Ricerca con chiave primariaCompatible with Milvus 2.6.9+

Quando si effettuano ricerche di similarità, viene sempre richiesto di fornire uno o più vettori di query, anche se i vettori di query sono già presenti nella collezione di destinazione. Per evitare di recuperare i vettori prima della ricerca, è possibile utilizzare le chiavi primarie.

Panoramica

Nelle piattaforme di e-commerce, gli utenti possono inserire una parola chiave per recuperare i prodotti che vi corrispondono. Una volta che l'utente visualizza la pagina di dettaglio di un prodotto, la piattaforma mostra anche un elenco di prodotti simili in fondo alla pagina per gli utenti che desiderano confrontarli.

Le raccomandazioni sono ordinate in base alla loro somiglianza con la parola chiave o con il prodotto corrente. Per ottenere questo risultato, gli sviluppatori della piattaforma devono recuperare la rappresentazione vettoriale della parola chiave o del prodotto corrente da Milvus prima dell'effettiva ricerca di somiglianza, il che aumenta i tempi di andata e ritorno tra la piattaforma e Milvus e comporta la trasmissione di un gran numero di float ad alta dimensionalità attraverso la rete.

Per semplificare la logica di interazione tra le applicazioni e Milvus, ridurre il numero di viaggi di andata e ritorno ed evitare la trasmissione di grandi quantità di valori in virgola mobile ad alta dimensione attraverso la rete, si può prendere in considerazione l'uso di ricerche a chiave primaria.

In una ricerca a chiave primaria, non è necessario fornire alcun vettore di interrogazione. Viene invece richiesto di fornire le chiavi primarie (ids) delle entità che contengono i vettori di interrogazione.

Limiti e restrizioni

  • Le ricerche con le chiavi primarie si applicano a tutti i tipi di dati vettoriali, ad eccezione dei campi vettoriali sparsi derivati da campi VarChar, come nelle funzioni BM25.

  • È possibile utilizzare le chiavi primarie al posto dei vettori di query nelle ricerche filtrate, per intervallo e per raggruppamento, eventualmente con la paginazione abilitata. Tuttavia, questa funzione non si applica alle ricerche ibride e agli iteratori di ricerca.

  • Per le ricerche di somiglianza che coinvolgono elenchi di incorporazioni, è ancora necessario recuperare i vettori di query, organizzarli in elenchi di incorporazioni ed eseguire le ricerche.

  • Non è possibile utilizzare chiavi primarie al posto dei vettori di query nelle API RESTful.

  • Per le chiavi primarie inesistenti o in formato non corretto, Milvus segnala un errore.

  • Le chiavi primarie e i vettori di query si escludono a vicenda. Anche se si forniscono entrambi, si verificano errori.

Esempi

Gli esempi seguenti presuppongono che tutti gli ID Int64 forniti siano disponibili nella collezione di destinazione.

Le chiavi primarie non vengono utilizzate per il filtraggio, ma solo per il recupero dei vettori.

Per effettuare una ricerca di base a chiave primaria, è sufficiente sostituire i vettori della query con le chiavi primarie.

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

Esempio 2: Ricerca filtrata con chiavi primarie

L'esempio seguente presuppone che color e likes siano due campi definiti dallo schema nell'insieme di destinazione.

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

Esempio 3: Ricerca filtrata con chiavi primarie

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

Esempio 4: Ricerca per raggruppamento tramite chiavi primarie

L'esempio seguente presuppone che docId sia un campo definito dallo schema nell'insieme di destinazione.

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

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?