Query condizionale

Questo argomento introduce come eseguire query condizionali.

A differenza delle ricerche di similarità su vettori, le query condizionali recuperano vettori utilizzando filtri scalari attraverso espressioni booleane. Milvus supporta le query su campi scalari e varie espressioni booleane. Le espressioni booleane possono essere utilizzate per filtrare campi scalari o campi chiave primaria per recuperare tutti i risultati che corrispondono alle condizioni di filtraggio.

Nell'esempio seguente viene dimostrato come interrogare un set di dati di 2000 righe di libri, inclusi l'ID del libro (chiave primaria), il conteggio delle parole (campo scalare) e l'introduzione del libro (campo vettoriale), simulando lo scenario di interrogazione di un libro specifico in base al suo ID.

Caricamento della collezione

Prima di eseguire una query, la collezione deve essere caricata in memoria.

from pymilvus import Collection
collezione = Collection("libro")      # Ottenere una collezione esistente.
collezione.load()

Eseguire una query

Nell'esempio seguente vengono filtrati i vettori in base a valori specifici di book_id e vengono restituiti i campi book_id e book_intro nei risultati.

Milvus supporta l'impostazione dei livelli di consistenza per le query. L'esempio in questo argomento imposta il livello di consistenza su Strong. È anche possibile impostare il livello di consistenza su Bounded, Session o Eventually. Per ulteriori informazioni sui quattro livelli di consistenza in Milvus, fare riferimento a Consistenza.

È inoltre possibile utilizzare campi dinamici nell'espressione del filtro e specificare i campi di output nella richiesta di query. Ad esempio, fare riferimento a Schema Dinamico.

res = collezione.query(
  expr = "book_id in [2,4,6,8]",
  offset = 0,
  limit = 10, 
  output_fields = ["book_id", "book_intro"],
)

Parametro Descrizione
expr Espressione booleana utilizzata per filtrare le proprietà. Per ulteriori dettagli sulle regole delle espressioni booleane, fare riferimento a Regole delle Espressioni Booleane.
limit Numero dei risultati più simili da restituire. La somma di questo valore e offset dovrebbe essere inferiore a 16384.
offset Numero di risultati da saltare nella collezione. Disponibile solo quando viene specificato limit, e la somma di questo valore e limit dovrebbe essere inferiore a 16384. Ad esempio, se si desidera interrogare i 9° e 10° vicini più prossimi di un vettore, impostare limit su 2 e offset su 8.
output_fields (opzionale) Elenco dei nomi dei campi da restituire.
partition_names (opzionale) Elenco dei nomi delle partizioni da interrogare.
consistency_level (opzionale) Livello di consistenza per la query.

Controllare i risultati restituiti.

sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res

Contare le entità

Nel momento in cui si esegue una query, è possibile aggiungere count(*) in output_fields in modo che Milvus possa restituire il numero di entità nella collezione. Se si desidera contare il numero di entità che soddisfano condizioni specifiche, utilizzare expr per definire un'espressione booleana.

Contare tutte le entità nella collezione:

res = collezione.query(
  expr="", 
  output_fields = ["count(*)"],
)

print(res)
print(res[0])

Conta il numero di entità che soddisfano condizioni di filtro specifiche:

res = collezione.query(
  expr="book_id in [2,4,6,8]", 
  output_fields = ["count(*)"],
)

print(res)
print(res[0])

Limitazioni

Quando si utilizza count(*) in output_fields, è vietato l'uso del parametro limit.