Templatura dei filtri
In Milvus, le espressioni di filtro complesse con numerosi elementi, in particolare quelle che coinvolgono caratteri non ASCII come i caratteri CJK, possono influire significativamente sulle prestazioni delle query. Per ovviare a questo problema, Milvus introduce un meccanismo di template delle espressioni di filtro progettato per migliorare l'efficienza riducendo il tempo di analisi delle espressioni complesse. Questa pagina spiega come utilizzare il templating delle espressioni di filtro nelle operazioni di ricerca, interrogazione e cancellazione.
Panoramica
Il templating delle espressioni di filtro consente di creare espressioni di filtro con segnaposto, che possono essere sostituiti dinamicamente con valori durante l'esecuzione della query. La templatura evita di incorporare grandi array o espressioni complesse direttamente nel filtro, riducendo i tempi di analisi e migliorando le prestazioni della query.
Supponiamo di avere un'espressione di filtro che coinvolge due campi, age
e city
, e di voler trovare tutte le persone la cui età è superiore a 25 anni e che vivono in "北京" (Pechino) o "上海" (Shanghai). Invece di inserire direttamente i valori nell'espressione del 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
quando la query verrà eseguita.
L'uso del template delle espressioni di filtro in Milvus offre diversi vantaggi.
Riduzione del tempo di analisi: sostituendo le espressioni di filtro complesse o di grandi dimensioni con dei segnaposto, il sistema spende meno tempo per l'analisi e l'elaborazione del filtro.
Migliori prestazioni delle query: Grazie alla riduzione dell'overhead di parsing, le prestazioni delle query migliorano, portando a QPS più elevati e a tempi di risposta più rapidi.
Scalabilità : Man mano che i dataset crescono e le espressioni dei filtri diventano più complesse, il templating garantisce prestazioni efficienti e scalabili.
Operazioni di ricerca
Per le operazioni di ricerca in Milvus, l'espressione filter
è usata per definire la condizione di filtraggio e il parametro filter_params
è usato per specificare i valori dei segnaposto. Il dizionario filter_params
contiene i valori dinamici che Milvus utilizzerà per sostituire l'espressione del 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, Milvus sostituirà dinamicamente {age}
con 25
e {city}
con ["北京", "上海"]
durante l'esecuzione della ricerca.
Operazioni di query
Lo stesso meccanismo di template può essere applicato alle operazioni di interrogazione in Milvus. Nella funzione query
si definisce l'espressione del filtro e si usa 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 cancellazione
È possibile utilizzare la templatura delle espressioni di filtro anche nelle operazioni di cancellazione. Come per le ricerche e le query, l'espressione filter
definisce le condizioni e 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 cancellazione, soprattutto quando si tratta di condizioni di filtro complesse.
Conclusione
La templatura delle espressioni di filtro è uno strumento essenziale per ottimizzare le prestazioni delle query in Milvus. Utilizzando i segnaposto e il dizionario filter_params
, è possibile ridurre significativamente il tempo di analisi di espressioni di filtro complesse. Questo porta a un'esecuzione più rapida delle query e a migliori prestazioni complessive.