Eseguire Query Condizionali
Questo argomento introduce come eseguire query condizionali, simili alle condizioni SQL WHERE.
A differenza della ricerca di similarità vettoriale, le query recuperano vettori basati su filtraggio scalare utilizzando espressioni booleane. Milvus supporta vari tipi di dati nei campi scalari e una varietà di espressioni booleane. Le espressioni booleane possono filtrare campi scalari o campi chiave primaria e recuperare tutti i risultati corrispondenti alle condizioni di filtro.
Nell'esempio seguente si illustra come eseguire una query su un set di dati contenente 2000 righe, tra cui ID del libro (chiave primaria), conteggio delle parole (campo scalare) e introduzione del libro (campo vettoriale). Si simula la ricerca di libri specifici in base ai loro ID.
Caricamento della Collezione
In Milvus, tutte le operazioni di ricerca e query vengono eseguite in memoria. Prima di eseguire una query, è necessario caricare la collezione in memoria.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"book", // CollectionName
false // async
)
if err != nil {
log.Fatal("Impossibile caricare la collezione:", err.Error())
}
Esecuzione della 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
dei risultati.
Milvus supporta l'impostazione di livelli di consistenza per le query. In questo esempio si imposta il livello di consistenza su Strong
. È inoltre possibile impostare il livello di consistenza su Bounded
, Session
o Eventually
. Per maggiori informazioni sui quattro livelli di consistenza in Milvus, fare riferimento a Consistenza.
È inoltre possibile utilizzare campi dinamici nelle espressioni di filtro e campi di output nella richiesta di query. Ad esempio, fare riferimento al modello dinamico.
opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
option.Limit = 3
option.Offset = 0
option.ConsistencyLevel = entity.ClStrong
option.IgnoreGrowing = false
})
queryResult, err := milvusClient.Query(
context.Background(), // ctx
"book", // CollectionName
"", // PartitionName
entity.NewColumnInt64("book_id", []int64{2,4,6,8}), // expr
[]string{"book_id", "book_intro"}, // OutputFields
opt, // queryOptions
)
if err != nil {
log.Fatal("Impossibile eseguire la query sulla collezione:", err.Error())
}
Parametro | Descrizione | Opzioni |
---|---|---|
ctx |
Contesto utilizzato per controllare il processo di chiamata API. | N/D |
CollectionName |
Nome della collezione da interrogare. | N/D |
partitionName |
Nomi delle partizioni da caricare. Se vuoto, interroga tutte le partizioni. | N/D |
expr |
Espressione booleana utilizzata per filtrare attributi. | Per ulteriori informazioni, vedere Regole delle espressioni booleane. |
OutputFields |
Nomi dei campi da restituire. | I campi vettoriali non sono supportati nella versione attuale. |
opts |
Opzioni di query rappresentate sotto forma di entity.SearchQueryOptionFunc . |
- Limit indica il numero di entità da restituire. - Offset indica il numero di entità da saltare durante il processo di ricerca. La somma di questo parametro e Limit dovrebbe essere inferiore a 16384 . - ConsistencyLevel indica il livello di consistenza da applicare durante il processo di ricerca. - Ignore Growing indica se ignorare il segmento in crescita durante il processo di ricerca di similarità. Il valore predefinito è False , indicando che la ricerca coinvolge il segmento in crescita. |
Verificare il risultato restituito.
fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
fmt.Println(qr.IDs)
}
Calcolo della Quantità di Entità
Quando si esegue una query, è possibile aggiungere count(*)
ai output_fields
, in modo che Milvus possa restituire la quantità di entità nella collezione. Se si desidera contare la quantità di entità che soddisfano condizioni specifiche, utilizzare expr
per definire un'espressione booleana.
Limitazioni
Nell'utilizzo di count(*)
nei output_fields
, non è consentito l'uso del parametro limit
.