Grundlegende Operatoren

Milvus bietet eine umfangreiche Auswahl an grundlegenden Operatoren, mit denen Sie Daten effizient filtern und abfragen können. Mit diesen Operatoren können Sie Ihre Suchbedingungen anhand von skalaren Feldern, numerischen Berechnungen, logischen Bedingungen und vielem mehr verfeinern. Das Verständnis der Verwendung dieser Operatoren ist entscheidend für die Erstellung präziser Abfragen und die Maximierung der Effizienz Ihrer Suchvorgänge.

Vergleichsoperatoren

Vergleichsoperatoren werden verwendet, um Daten anhand von Gleichheit, Ungleichheit oder Größe zu filtern. Sie können auf numerische und Textfelder angewendet werden.

Unterstützte Vergleichsoperatoren

  • == (Gleich)

  • != (Nicht gleich)

  • > (Größer als)

  • < (Kleiner als)

  • >= (Größer als oder gleich)

  • <= (Kleiner oder gleich)

Beispiel 1: Filtern mit „gleich“ (==)

Angenommen, Sie haben ein Feld namens „ status “ und möchten alle Entitäten finden, bei denen „ status “ den Wert „active“ hat. Dazu können Sie den Gleichheitsoperator „ == “ verwenden:

filter = 'status == "active"'

Beispiel 2: Filtern mit „ungleich“ (!=)

Um Entitäten zu finden, bei denen „ status “ nicht „inactive“ ist:

filter = 'status != "inactive"'

Beispiel 3: Filtern mit „größer als“ (>)

Wenn Sie alle Entitäten mit einem „ age “ von mehr als 30 finden möchten:

filter = 'age > 30'

Beispiel 4: Filtern mit „kleiner als“

So finden Sie Entitäten, bei denen „ price “ kleiner als 100 ist:

filter = 'price < 100'

Beispiel 5: Filtern mit „größer als oder gleich“ (>=)

Wenn Sie alle Entitäten mit einem „ rating “ von größer oder gleich 4 suchen möchten:

filter = 'rating >= 4'

Beispiel 6: Filtern mit „kleiner oder gleich“

So finden Sie Entitäten mit einem „ discount “ von höchstens 10 %:

filter = 'discount <= 10'

Bereichsoperatoren

Bereichsoperatoren helfen dabei, Daten anhand einer bestimmten Wertemenge zu filtern. Milvus unterstützt „ IN “ für die Überprüfung der Zugehörigkeit zu einer Menge.

Wenn Sie alle Entitäten finden möchten, bei denen der „ color “ entweder „rot“, „grün“ oder „blau“ ist:

filter = 'color in ["red", "green", "blue"]'

Dies ist nützlich, wenn Sie die Zugehörigkeit zu einer Liste von Werten überprüfen möchten.

Operatoren für Musterabgleich

Musterabgleichsoperatoren helfen dabei, Zeichenfolgenwerte anhand von Platzhaltermustern oder regulären Ausdrücken zu filtern.

  • LIKE: Wird verwendet, um einfache Platzhaltermuster mit Zeichenfolgenwerten abzugleichen. Beispielsweise findet „ name LIKE "Prod%" “ Werte, die mit „ Prod “ beginnen.

  • =~: Wird verwendet, um einen Zeichenfolgenwert mit einem RE2-regulären Ausdruck abzugleichen. Beispielsweise passt „ code =~ "E[0-9]{4}" “ auf Werte, die einen Fehlercode wie „ E1001 “ enthalten.

  • !~: Wird verwendet, um Zeichenfolgenwerte auszuschließen, die einem RE2-regulären Ausdruck entsprechen. Dies entspricht „ NOT (field =~ "pattern") “.

So finden Sie Entitäten, bei denen „ name “ mit „ Prod “ beginnt:

filter = 'name LIKE "Prod%"'

So finden Sie Entitäten, deren „ code “ einen Fehlercode wie „ E1001 “ enthält:

filter = 'code =~ "E[0-9]{4}"'

So schließen Sie Entitäten aus, deren „ message “ mit „ DEBUG “ beginnt:

filter = 'message !~ "^DEBUG"'

Weitere Informationen zur Wahl zwischen „ LIKE “ und regulären Ausdrücken, zu unterstützten Feldtypen, zur Syntax regulärer Ausdrücke, zu Escaping-Regeln und zur Leistung finden Sie unter „Musterabgleich“. Milvus ermöglicht es Ihnen außerdem, einen „ NGRAM “-Index für „ VARCHAR “-Felder oder JSON-String-Pfade zu erstellen, um geeignete Filter für den Musterabgleich zu beschleunigen. Weitere Informationen finden Sie unter „NGRAM“.

Arithmetische Operatoren

Mit arithmetischen Operatoren können Sie Bedingungen erstellen, die auf Berechnungen mit numerischen Feldern basieren.

Unterstützte arithmetische Operatoren

  • + (Addition)

  • - (Subtraktion)

  • * (Multiplikation)

  • / (Division)

  • % (Modulo)

  • ** (Potenzieren)

Beispiel 1: Verwendung des Moduls (%)

Um Elemente zu finden, bei denen der id eine gerade Zahl ist (d. h. durch 2 teilbar):

filter = 'id % 2 == 0'

Beispiel 2: Verwendung der Potenzierung (**)

Um Elemente zu finden, bei denen price zur Potenz 2 größer als 1000 ist:

filter = 'price ** 2 > 1000'

Bitweise OperatorenCompatible with Milvus 3.0.0+

Bitweise Operatoren sind nützlich, wenn ein Ganzzahlfeld mehrere Flags codiert, wie z. B. Berechtigungen, Feature-Flags oder Statusbits. Sie können diese Operatoren in Filterausdrücken verwenden, um einzelne Bits in einem Ganzzahlwert zu prüfen, zu kombinieren oder zu vergleichen.

Bei skalaren Feldern gelten bitweise Operatoren für ganzzahlige Feldtypen wie „ INT8 “, „ INT16 “, „ INT32 “ und „ INT64 “.

Unterstützte bitweise Operatoren

OperatorNameTypische Verwendung
&Bitweises UNDPrüft, ob bestimmte Bits gesetzt sind.
|Bitweises ODERKombiniert Bits vor dem Vergleich.
^Bitweises XORVergleichen Sie die Bitunterschiede zwischen zwei Werten.

Beispiel: Filtern nach Berechtigungsbits

Angenommen, Sie haben ein Ganzzahlfeld namens „ permissions “, und jedes Bit in der Ganzzahl stellt ein Berechtigungsflag dar:

BerechtigungsflagBitwert
READ1
WRITE2
SHARE4
ADMIN8

Beispielsweise bedeutet „ permissions = 5 “, dass die Bits „ READ “ und „ SHARE “ gesetzt sind, da gilt: „ 5 = 1 + 4 “.

Um Entitäten zu finden, bei denen das Bit „ SHARE “ gesetzt ist, verwenden Sie die bitweise UND-Verknüpfung (&):

filter = "(permissions & 4) == 4"

Um Entitäten zu finden, bei denen das Setzen des Bits „ WRITE “ den Berechtigungssatz „ READ + WRITE + SHARE “ ergibt, verwenden Sie die bitweise ODER-Verknüpfung (|):

filter = "(permissions | 2) == 7"

Um Entitäten zu finden, deren Berechtigungsbits sich von „ READ + WRITE + SHARE “ nur durch das Bit „ WRITE “ unterscheiden, verwenden Sie die bitweise XOR-Operation (^):

filter = "(permissions ^ 7) == 2"

Schließen Sie die bitweise Operation immer in Klammern ein, bevor Sie das Ergebnis vergleichen, z. B. „ (permissions & 4) == 4 “. Milvus 3.0.0 unterstützt „ & “, „ | “ und „ ^ “ in Filterausdrücken. Das bitweise NOT (~) und die Verschiebungsoperatoren (<< und >>) werden nicht unterstützt.

Logische Operatoren

Logische Operatoren werden verwendet, um mehrere Bedingungen zu einem komplexeren Filterausdruck zu kombinieren. Dazu gehören „ AND “, „ OR “ und „ NOT “.

Unterstützte logische Operatoren

  • AND: Kombiniert mehrere Bedingungen, die alle wahr sein müssen.

  • OR: Kombiniert Bedingungen, von denen mindestens eine wahr sein muss.

  • NOT: Negiert eine Bedingung.

Beispiel 1: Verwendung von „ AND “ zum Kombinieren von Bedingungen

Um alle Produkte zu finden, bei denen „ price “ größer als 100 und „ stock “ größer als 50 ist:

filter = 'price > 100 AND stock > 50'

Beispiel 2: Verwendung von „ OR “ zum Kombinieren von Bedingungen

So finden Sie alle Produkte, bei denen „ color “ entweder „rot“ oder „blau“ ist:

filter = 'color == "red" OR color == "blue"'

Beispiel 3: Verwendung von „ NOT “ zum Ausschluss einer Bedingung

So finden Sie alle Produkte, bei denen „ color “ nicht „green“ ist:

filter = 'NOT color == "green"'

Operatoren „IS NULL“ und „IS NOT NULL“

Die Operatoren „ IS NULL “ und „ IS NOT NULL “ werden verwendet, um Felder danach zu filtern, ob sie einen Nullwert (Fehlen von Daten) enthalten.

  • IS NULL: Identifiziert Entitäten, bei denen ein bestimmtes Feld einen Nullwert enthält, d. h., der Wert fehlt oder ist undefiniert.

  • IS NOT NULL: Identifiziert Entitäten, bei denen ein bestimmtes Feld einen beliebigen Wert außer „null“ enthält, d. h., das Feld hat einen gültigen, definierten Wert.

Bei den Operatoren wird die Groß-/Kleinschreibung nicht berücksichtigt, sodass Sie sowohl „ IS NULL “ als auch „ is null “ sowie „ IS NOT NULL “ und „ is not null “ verwenden können.

Normale Skalarfelder mit Nullwerten

Milvus ermöglicht das Filtern nach regulären Skalarfeldern, wie z. B. Zeichenfolgen oder Zahlen, die Nullwerte enthalten.

Eine leere Zeichenkette "" wird für ein Feld vom Typ „ VARCHAR “ nicht als Nullwert behandelt.

So rufen Sie Entitäten ab, bei denen das Feld „ description “ den Wert „null“ hat:

filter = 'description IS NULL'

So rufen Sie Entitäten ab, bei denen das Feld „ description “ nicht null ist:

filter = 'description IS NOT NULL'

So rufen Sie Entitäten ab, bei denen das Feld „ description “ nicht null ist und das Feld „ price “ größer als 10 ist:

filter = 'description IS NOT NULL AND price > 10'

JSON-Felder mit Null-Werten

Milvus ermöglicht das Filtern nach JSON-Feldern, die Nullwerte enthalten. Ein JSON-Feld wird in folgenden Fällen als null behandelt:

  • Das gesamte JSON-Objekt wird explizit auf „None“ (null) gesetzt, zum Beispiel „ {"metadata": None} “.

  • Das JSON-Feld selbst fehlt vollständig in der Entität.

Wenn einige Elemente innerhalb eines JSON-Objekts null sind (z. B. einzelne Schlüssel), wird das Feld dennoch als nicht null betrachtet. Beispielsweise wird \{"metadata": \{"category": None, "price": 99.99}} nicht als null behandelt, obwohl der Schlüssel „ category “ null ist.

Um näher zu veranschaulichen, wie Milvus mit JSON-Feldern mit Null-Werten umgeht, betrachten Sie die folgenden Beispieldaten mit einem JSON-Feld „ metadata “:

data = [
  {
      "metadata": {"category": "electronics", "price": 99.99, "brand": "BrandA"},
      "pk": 1,
      "embedding": [0.12, 0.34, 0.56]
  },
  {
      "metadata": None, # Entire JSON object is null
      "pk": 2,
      "embedding": [0.56, 0.78, 0.90]
  },
  {  # JSON field `metadata` is completely missing
      "pk": 3,
      "embedding": [0.91, 0.18, 0.23]
  },
  {
      "metadata": {"category": None, "price": 99.99, "brand": "BrandA"}, # Individual key value is null
      "pk": 4,
      "embedding": [0.56, 0.38, 0.21]
  }
]

Beispiel 1: Entitäten abrufen, bei denen die Metadaten null sind

So finden Sie Entitäten, bei denen das Feld „ metadata “ entweder fehlt oder explizit auf „None“ gesetzt ist:

filter = 'metadata IS NULL'

# Example output:
# data: [
#     "{'metadata': None, 'pk': 2}",
#     "{'metadata': None, 'pk': 3}"
# ]

Beispiel 2: Entitäten abrufen, bei denen die Metadaten nicht null sind

So finden Sie Entitäten, bei denen das Feld „ metadata “ nicht null ist:

filter = 'metadata IS NOT NULL'

# Example output:
# data: [
#     "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
#     "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]

ARRAY-Felder mit Null-Werten

Milvus ermöglicht das Filtern nach ARRAY-Feldern, die Nullwerte enthalten. Ein ARRAY-Feld wird in folgenden Fällen als null behandelt:

  • Das gesamte ARRAY-Feld ist explizit auf „None“ (null) gesetzt, zum Beispiel „ "tags": None “.

  • Das ARRAY-Feld fehlt vollständig in der Entität.

Ein ARRAY-Feld kann keine teilweisen Nullwerte enthalten, da alle Elemente in einem ARRAY-Feld denselben Datentyp haben müssen. Weitere Informationen finden Sie unter „Array-Feld“.

Um näher zu veranschaulichen, wie Milvus ARRAY-Felder mit Nullwerten behandelt, betrachten Sie die folgenden Beispieldaten mit einem ARRAY-Feld „ tags “:

data = [
  {
      "tags": ["pop", "rock", "classic"],
      "ratings": [5, 4, 3],
      "pk": 1,
      "embedding": [0.12, 0.34, 0.56]
  },
  {
      "tags": None,  # Entire ARRAY is null
      "ratings": [4, 5],
      "pk": 2,
      "embedding": [0.78, 0.91, 0.23]
  },
  {  # The tags field is completely missing
      "ratings": [9, 5],
      "pk": 3,
      "embedding": [0.18, 0.11, 0.23]
  }
]

Beispiel 1: Entitäten abrufen, bei denen „tags“ den Wert „null“ hat

So rufen Sie Entitäten ab, bei denen das Feld „ tags “ entweder fehlt oder explizit auf „ None “ gesetzt ist:

filter = 'tags IS NULL'

# Example output:
# data: [
#     "{'tags': None, 'ratings': [4, 5], 'embedding': [0.78, 0.91, 0.23], 'pk': 2}",
#     "{'tags': None, 'ratings': [9, 5], 'embedding': [0.18, 0.11, 0.23], 'pk': 3}"
# ]

Beispiel 2: Entitäten abrufen, bei denen „tags“ nicht null ist

So rufen Sie Entitäten ab, bei denen das Feld „ tags “ nicht null ist:

filter = 'tags IS NOT NULL'

# Example output:
# data: [
#     "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
#     "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]

Tipps zur Verwendung grundlegender Operatoren mit JSON- und ARRAY-Feldern

Die Grundoperatoren in Milvus sind zwar vielseitig und können auf skalare Felder angewendet werden, lassen sich aber auch effektiv mit den Schlüsseln und Indizes in den JSON- und ARRAY-Feldern nutzen.

Wenn Sie beispielsweise ein Feld „ product “ haben, das mehrere Schlüssel wie „ price “, „ model “ und „ tags “ enthält, verweisen Sie immer direkt auf den Schlüssel:

filter = 'product["price"] > 1000'

Um Datensätze zu finden, bei denen die erste Temperatur in einem Array aufgezeichneter Temperaturen einen bestimmten Wert überschreitet, verwenden Sie:

filter = 'history_temperatures[0] > 30'

Fazit

Milvus bietet eine Reihe grundlegender Operatoren, die Ihnen Flexibilität beim Filtern und Abfragen Ihrer Daten bieten. Durch die Kombination von Vergleichs-, Bereichs-, arithmetischen und logischen Operatoren können Sie leistungsstarke Filterausdrücke erstellen, um Ihre Suchergebnisse einzugrenzen und die benötigten Daten effizient abzurufen.

FAQ

Gibt es eine Begrenzung für die Länge der Liste der Übereinstimmungswerte in Filterbedingungen (z. B. filter=’color in ["red", "green", “blue”]')? Was soll ich tun, wenn die Liste zu lang ist?

Zilliz Cloud legt keine Längenbeschränkung für die Liste der Übereinstimmungswerte in Filterbedingungen fest. Eine übermäßig lange Liste kann jedoch die Abfrageleistung erheblich beeinträchtigen. Wenn Ihre Filterbedingung eine lange Liste von Übereinstimmungswerten oder einen komplexen Ausdruck mit vielen Elementen enthält, empfehlen wir die Verwendung von Filtervorlagen, um die Abfrageleistung zu verbessern.