Filter-Vorlagen
In Milvus können komplexe Filterausdrücke mit zahlreichen Elementen, insbesondere solche, die Nicht-ASCII-Zeichen wie CJK-Zeichen enthalten, die Abfrageleistung erheblich beeinträchtigen. Um diesem Problem entgegenzuwirken, führt Milvus einen Mechanismus für Filterausdruck-Vorlagen ein, der die Effizienz steigern soll, indem er den Zeitaufwand für die Analyse komplexer Ausdrücke reduziert. Auf dieser Seite wird die Verwendung von Filterausdruck-Vorlagen bei Such-, Abfrage- und Löschvorgängen erläutert.
Übersicht
Mit Filterausdrucksvorlagen können Sie Filterausdrücke mit Platzhaltern erstellen, die während der Abfrageausführung dynamisch durch Werte ersetzt werden können. Durch die Verwendung von Vorlagen vermeiden Sie es, große Arrays oder komplexe Ausdrücke direkt in den Filter einzubetten, wodurch die Parsing-Zeit reduziert und die Abfrageleistung verbessert wird.
Angenommen, Sie haben einen Filterausdruck, der zwei Felder umfasst: „ age “ und „ city “, und Sie möchten alle Personen finden, deren Alter über 25 liegt und die entweder in „北京“ (Peking) oder „上海“ (Shanghai) leben. Anstatt die Werte direkt in den Filterausdruck einzubetten, können Sie eine Vorlage verwenden:
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
Hier sind „ {age} “ und „ {city} “ Platzhalter, die bei der Ausführung der Abfrage durch die tatsächlichen Werte in „ filter_params “ ersetzt werden.
Die Verwendung von Filterausdrucksvorlagen in Milvus bietet mehrere wesentliche Vorteile:
Reduzierte Parsing-Zeit: Durch das Ersetzen großer oder komplexer Filterausdrücke durch Platzhalter benötigt das System weniger Zeit für das Parsen und die Verarbeitung des Filters.
Verbesserte Abfrageleistung: Durch den geringeren Parsing-Aufwand verbessert sich die Abfrageleistung, was zu höheren QPS und schnelleren Antwortzeiten führt.
Skalierbarkeit: Wenn Ihre Datensätze wachsen und Filterausdrücke komplexer werden, sorgt die Verwendung von Vorlagen dafür, dass die Leistung effizient und skalierbar bleibt.
Suchvorgänge
Für Suchvorgänge in Milvus wird der Ausdruck „ filter “ zur Definition der Filterbedingung verwendet, und der Parameter „ filter_params “ dient zur Angabe der Werte für die Platzhalter. Das Wörterbuch „ filter_params “ enthält die dynamischen Werte, die Milvus zur Ersetzung in der Filterausdruck verwendet.
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 diesem Beispiel ersetzt Milvus bei der Ausführung der Suche „ {age} “ dynamisch durch „ 25 “ und „ {city} “ durch „ ["北京", "上海"] “.
Abfrageoperationen
Der gleiche Vorlagenmechanismus kann auf Abfrageoperationen in Milvus angewendet werden. In der Funktion „ query “ definieren Sie den Filterausdruck und verwenden „ filter_params “, um die zu ersetzenden Werte anzugeben.
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
)
Durch die Verwendung von ` filter_params` verarbeitet Milvus das dynamische Einfügen von Werten effizient und verbessert so die Geschwindigkeit der Abfrageausführung.
Löschvorgänge
Sie können die Verwendung von Filterausdrucksvorlagen auch bei Löschvorgängen nutzen. Ähnlich wie bei der Suche und bei Abfragen definiert der Ausdruck „ filter “ die Bedingungen, und die Funktion „ filter_params “ liefert die dynamischen Werte für die Platzhalter.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
Dieser Ansatz verbessert die Leistung von Löschvorgängen, insbesondere bei komplexen Filterbedingungen.
Fazit
Filterausdrucksvorlagen sind ein unverzichtbares Werkzeug zur Optimierung der Abfrageleistung in Milvus. Durch die Verwendung von Platzhaltern und dem „ filter_params “-Wörterbuch können Sie den Zeitaufwand für die Analyse komplexer Filterausdrücke erheblich reduzieren. Dies führt zu einer schnelleren Abfrageausführung und einer besseren Gesamtleistung.