Filterung erklärt
Milvus bietet leistungsstarke Filtermöglichkeiten, die eine präzise Abfrage Ihrer Daten ermöglichen. Mit Filterausdrücken können Sie bestimmte skalare Felder anvisieren und die Suchergebnisse mit verschiedenen Bedingungen verfeinern. In diesem Handbuch wird die Verwendung von Filterausdrücken in Milvus anhand von Beispielen erläutert, die sich auf Abfrageoperationen konzentrieren. Sie können diese Filter auch in Such- und Löschanfragen anwenden.
Grundlegende Operatoren
Milvus unterstützt mehrere grundlegende Operatoren zum Filtern von Daten.
Vergleichsoperatoren:
==
,!=
,>
,<
,>=
und<=
ermöglichen die Filterung auf der Grundlage von numerischen, Text- oder Datumsfeldern.Bereichsfilter:
IN
undLIKE
helfen bei der Suche nach bestimmten Wertebereichen oder -mengen.Arithmetische Operatoren:
+
,-
,*
,/
,%
und `` werden für Berechnungen mit numerischen Feldern verwendet.Logische Operatoren:
AND
,OR
, undNOT
oder '&&', '||', '~', '!' kombinieren mehrere Bedingungen zu komplexen Ausdrücken.
Beispiel: Filtern nach Farbe
Um Entitäten mit Primärfarben (rot, grün oder blau) in einem skalaren Feld color
zu finden, verwenden Sie den folgenden Filterausdruck.
filter='color in ["red", "green", "blue"]'
Beispiel: Filtern von JSON-Feldern
Milvus erlaubt es, Schlüssel in JSON-Feldern zu referenzieren. Wenn Sie zum Beispiel ein JSON-Feld product
mit den Schlüsseln price
und model
haben und Produkte mit einem bestimmten Modell und einem Preis unter 1.850 finden möchten, verwenden Sie diesen Filterausdruck.
filter='product["model"] == "JSN-087" and product["price"] < 1850'
Beispiel: Filtern von Array-Feldern
Wenn Sie ein Array-Feld history_temperatures
mit Temperaturdatensätzen haben und Observatorien finden möchten, bei denen die 10. aufgezeichnete Temperatur 23°C überschreitet, verwenden Sie diesen Ausdruck.
filter='history_temperatures[10] > 23'
Weitere Informationen zu diesen grundlegenden Operatoren finden Sie unter Grundlegende Operatoren.
Vorlagen für Filterausdrücke
Wenn Sie mit CJK-Zeichen filtern, kann die Verarbeitung aufgrund der größeren Zeichensätze und Kodierungsunterschiede komplexer sein. Dies kann zu einer langsameren Leistung führen, insbesondere mit dem IN
Operator.
Milvus führt Filterausdruck-Vorlagen ein, um die Leistung bei der Arbeit mit CJK-Zeichen zu optimieren. Durch die Trennung der dynamischen Werte vom Filterausdruck kann die Abfragemaschine das Einfügen von Parametern effizienter handhaben.
Beispiel
Um Personen über 25 Jahre zu finden, die entweder in "北京" (Peking) oder "上海" (Shanghai) leben, verwenden Sie den folgenden Vorlagenausdruck.
filter = "age > 25 and city in ['北京', '上海']"
Um die Leistung zu verbessern, verwenden Sie diese Variante mit Parametern.
filter = "age > {age} and city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}
Dieser Ansatz reduziert den Parsing-Overhead und verbessert die Abfragegeschwindigkeit. Weitere Informationen finden Sie unter Filtervorlagen.
Datentypspezifische Operatoren
Milvus bietet erweiterte Filteroperatoren für bestimmte Datentypen, wie JSON-, ARRAY- und VARCHAR-Felder.
JSON-Feld-spezifische Operatoren
Milvus bietet erweiterte Operatoren für die Abfrage von JSON-Feldern, die eine präzise Filterung innerhalb komplexer JSON-Strukturen ermöglichen.
JSON_CONTAINS(identifier, jsonExpr)
: Prüft, ob ein JSON-Ausdruck im Feld existiert.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'
JSON_CONTAINS_ALL(identifier, jsonExpr)
: Stellt sicher, dass alle Elemente des JSON-Ausdrucks vorhanden sind.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'
JSON_CONTAINS_ANY(identifier, jsonExpr)
: Filtert nach Entitäten, bei denen mindestens ein Element im JSON-Ausdruck vorhanden ist.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'
Weitere Einzelheiten zu JSON-Operatoren finden Sie unter JSON-Operatoren.
Feldspezifische ARRAY-Operatoren
Milvus bietet erweiterte Filteroperatoren für Array-Felder, wie ARRAY_CONTAINS
, ARRAY_CONTAINS_ALL
, ARRAY_CONTAINS_ANY
und ARRAY_LENGTH
, die eine feinkörnige Kontrolle über Array-Daten ermöglichen.
ARRAY_CONTAINS
: Filtert Entitäten, die ein bestimmtes Element enthalten.
filter="ARRAY_CONTAINS(history_temperatures, 23)"
ARRAY_CONTAINS_ALL
: Filtert Entitäten, in denen alle Elemente einer Liste vorhanden sind.
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"
ARRAY_CONTAINS_ANY
: Filtert Entitäten, die ein beliebiges Element aus der Liste enthalten.
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"
ARRAY_LENGTH
: Filtert auf der Grundlage der Länge des Arrays.
filter="ARRAY_LENGTH(history_temperatures) < 10"
Weitere Einzelheiten zu Array-Operatoren finden Sie unter ARRAY-Operatoren.
VARCHAR feldspezifische Operatoren
Der Operator Text_Match
ermöglicht die präzise Suche nach Dokumenten auf der Grundlage bestimmter Suchbegriffe. Er ist besonders nützlich für gefilterte Suchen, die skalare Filter mit vektoriellen Ähnlichkeitssuchen kombinieren. Im Gegensatz zur semantischen Suche konzentriert sich Text Match auf das genaue Vorkommen von Begriffen.
Milvus verwendet Tantivy zur Unterstützung der invertierten Indizierung und der begriffsbasierten Textsuche. Der Prozess umfasst.
Analyzer: Tokenisiert und verarbeitet den Eingabetext.
Indizierung: Erzeugt einen invertierten Index, der eindeutige Token auf Dokumente abbildet.
Weitere Einzelheiten finden Sie unter Textabgleich.