StructArray-OperatorenCompatible with Milvus 3.0.x
Das Array of Structs oder StructArray in einer Entität speichert eine geordnete Menge von Struct-Elementen. Jede Struct im Array hat das gleiche vordefinierte Schema, das mehrere Vektoren und skalare Felder umfasst. Wenn ein skalares Unterfeld in einer Struct indiziert ist, können Sie Elementfilter und Operatoren aus der Match-Familie verwenden, um eine skalare Filterung darauf durchzuführen.
Ein Elementfilter wählt Entitäten aus, die mindestens einen Wert in einem StructArray-Feld enthalten, der dem angegebenen Prädikat entspricht. Im Gegensatz dazu werden die Operatoren der Match-Familie verwendet, um Entitäten zu finden, die eine bestimmte Anzahl oder ein bestimmtes Verhältnis von Werten in einem StructArray-Feld enthalten, das dem angegebenen Prädikat entspricht.
Wenn Sie Prädikate für $[subField] erstellen, stellen Sie sicher, dass das Unterfeld indiziert ist, wenn Sie mit großen Datensätzen arbeiten, da diese Operatoren eine Iteration durch die Array-Elemente für jede mögliche Entität erfordern.
Element-Filter
Verwenden Sie Elementfilter, wenn Sie prüfen müssen, ob eine Entität die Werte enthält, die einem bestimmten Prädikat in ihrem StructArray-Feld entsprechen.
element_filter(chunks, $[text] LIKE "Red%")
Wie im obigen Elementfilterausdruck gezeigt, gibt der Elementfilter Entitäten zurück, die mindestens einen Chunk enthalten, der im Unterfeld text mit "Red" beginnt. Der erste Parameter ist der Name des StructArray-Feldes, während der zweite Parameter das Prädikat ist, das für das Struct-Teilfeld gilt.
Sie können Vergleichs-, Bereichs- und arithmetische Operatoren verwenden, um die Bedingung zu erstellen, und logische Operatoren, um mehrere Bedingungen zu verketten, wie in Grundlegende Operatoren gezeigt.
Wenn Sie jedoch einen Filterausdruck erstellen, der sowohl ein Prädikat auf Entitätsebene als auch einen Elementfilter kombiniert, sollten Sie das Element fltler immer am Ende platzieren, wie im folgenden Beispiel gezeigt.
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
Operatoren der Abgleichsfamilie
Die Operatoren der Match-Familie funktionieren auch über ein StructArray-Feld. Anstatt einfach zu prüfen, ob ein Element existiert, können Sie bestimmen, wie viele Elemente (oder welcher Anteil) ein Elementprädikat erfüllen müssen.
MATCH_ANY(identifier, predicate): gibt Entitäten zurück, die mindestens einen Chunk enthalten, der mit "Red" im Unterfeldtextbeginnt; semantisch ist dies äquivalent zuelement_filter.MATCH_ALL(identifier, predicate)Red": gibt Entitäten zurück, deren Textteilfelder in allen Chunks mit "Red" beginnen.MATCH_LEAST(identifier, predicate, k)k: gibt Entitäten zurück, die mindestens Chunks enthalten, die mit "Red" imtextTeilfeld beginnen.MATCH_MOST(identifier, predicate, k)Red": gibt Entitäten zurück, die höchstenskChunks enthalten, die mit "Red" imtextSub-Feld beginnen.MATCH_EXACT(identifier, predicate, k)MATCH_ANY: gibt Entitäten zurück, die genaukchunks enthalten, die mit "Red" imtextTeilfeld beginnen.
MATCH_ANY
Dieser Operator wird als wahr ausgewertet, wenn mindestens ein Element im Array das Prädikat erfüllt, was anzeigt, dass das strukturelle Äquivalent eines logischen OR über alle Arrayelemente.
MATCH_ANY-Operatoren und Elementfilter sind semantisch identisch und können austauschbar verwendet werden. Wenn Sie die Logik count(matches) >= 1 ausdrücken müssen, sollten Sie sie verwenden.
BEISPIEL:
Das folgende Beispiel gibt Entitäten zurück, bei denen irgendein Teil des Dokuments mit "Red" beginnt.
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
Dieser Operator ergibt nur dann den Wert "wahr", wenn jedes einzelne Element im Array das Prädikat erfüllt.
Wenn Sie die Logik count(matches) == total elements ausdrücken müssen, verwenden Sie diesen Operator.
BEISPIEL:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
Dieser Operator ist ein quantitativer Filter, der wahr zurückgibt, wenn die Anzahl der Elemente, die das Prädikat erfüllen, größer oder gleich einer angegebenen Konstante k ist.
Wenn Sie die Logik count(matches) >= k ausdrücken müssen, verwenden Sie diesen Operator.
BEISPIEL:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
Dieser Operator ist ein quantitativer Filter, der wahr zurückgibt, wenn die Anzahl der Elemente, die das Prädikat erfüllen, kleiner oder gleich einer angegebenen Konstante k ist.
Dies ist besonders nützlich, um Entitäten herauszufiltern, die zu sehr auf ein bestimmtes Schlüsselwort abzielen (Rauschunterdrückung).
BEISPIEL:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
Dieser Operator ist der restriktivste quantitative Operator in der Familie. Er gibt true zurück, wenn und nur wenn die Anzahl der Elemente, die das Prädikat erfüllen, genau k ist.
BEISPIEL:
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)