Modelli di filtro
In Milvus, le espressioni di filtro complesse con numerosi elementi, in particolare quelle che includono caratteri non ASCII come i caratteri CJK, possono influire in modo significativo sulle prestazioni delle query. Per ovviare a questo problema, Milvus introduce un meccanismo di modelli per le espressioni di filtro progettato per migliorare l'efficienza riducendo il tempo impiegato per l'analisi delle espressioni complesse. Questa pagina illustra l'utilizzo dei modelli per le espressioni di filtro nelle operazioni di ricerca, query ed eliminazione.
Panoramica
I modelli di espressioni di filtro consentono di creare espressioni di filtro con segnaposto, che possono essere sostituiti dinamicamente con valori durante l’esecuzione della query. Utilizzando i modelli, si evita di incorporare array di grandi dimensioni o espressioni complesse direttamente nel filtro, riducendo il tempo di analisi e migliorando le prestazioni delle query.
Supponiamo di avere un’espressione di filtro che coinvolge due campi, age e city, e di voler trovare tutte le persone di età superiore ai 25 anni che vivono a “北京” (Pechino) o a “上海” (Shanghai). Anziché inserire direttamente i valori nell’espressione di filtro, è possibile utilizzare un modello:
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
In questo caso, {age} e {city} sono segnaposto che verranno sostituiti con i valori effettivi in filter_params al momento dell’esecuzione della query.
L’utilizzo dei modelli per le espressioni di filtro in Milvus offre diversi vantaggi chiave:
Tempo di analisi ridotto: sostituendo espressioni di filtro lunghe o complesse con segnaposto, il sistema impiega meno tempo per analizzare ed elaborare il filtro.
Migliori prestazioni delle query: grazie alla riduzione del carico di analisi, le prestazioni delle query migliorano, con un conseguente aumento del QPS e tempi di risposta più rapidi.
Scalabilità: man mano che i set di dati crescono e le espressioni di filtro diventano più complesse, l’uso dei modelli garantisce che le prestazioni rimangano efficienti e scalabili.
Operazioni di ricerca
Per le operazioni di ricerca in Milvus, l’espressione filter viene utilizzata per definire la condizione di filtraggio, mentre il parametro filter_params serve a specificare i valori per i segnaposto. Il dizionario filter_params contiene i valori dinamici che Milvus utilizzerà per sostituire i segnaposto nell’espressione di filtro.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.search(
"hello_milvus",
vectors[:nq],
filter=expr,
limit=10,
output_fields=["age", "city"],
search_params={"metric_type": "COSINE", "params": {"search_list": 100}},
filter_params=filter_params,
)
In questo esempio, durante l’esecuzione della ricerca Milvus sostituirà dinamicamente {age} con 25 e {city} con ["北京", "上海"].
Operazioni di query
Lo stesso meccanismo di template può essere applicato alle operazioni di query in Milvus. Nella funzione query, si definisce l’espressione di filtro e si utilizza filter_params per specificare i valori da sostituire.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.query(
"hello_milvus",
filter=expr,
output_fields=["age", "city"],
filter_params=filter_params
)
Utilizzando filter_params, Milvus gestisce in modo efficiente l’inserimento dinamico dei valori, migliorando la velocità di esecuzione delle query.
Operazioni di eliminazione
È possibile utilizzare i modelli di espressione di filtro anche nelle operazioni di eliminazione. Analogamente alla ricerca e alla query, l’espressione ` filter ` definisce le condizioni, mentre ` filter_params ` fornisce i valori dinamici per i segnaposto.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
Questo approccio migliora le prestazioni delle operazioni di eliminazione, specialmente quando si ha a che fare con condizioni di filtro complesse.
Conclusione
I modelli di espressioni di filtro sono uno strumento essenziale per ottimizzare le prestazioni delle query in Milvus. Utilizzando i segnaposto e il dizionario filter_params, è possibile ridurre significativamente il tempo impiegato per l’analisi di espressioni di filtro complesse. Ciò comporta un’esecuzione più rapida delle query e migliori prestazioni complessive.