Verwendung von Zeichenkettendaten zur Verbesserung Ihrer Anwendungen für die Ähnlichkeitssuche
Umschlag
Milvus 2.1 kommt mit einigen bedeutenden Aktualisierungen, die die Arbeit mit Milvus wesentlich erleichtern. Eine davon ist die Unterstützung von String-Datentypen. Im Moment unterstützt Milvus Datentypen wie Strings, Vektoren, Boolesche, Ganzzahlen, Gleitkommazahlen und mehr.
Dieser Artikel bietet eine Einführung in die Unterstützung von String-Datentypen. Lesen Sie ihn und erfahren Sie, was Sie damit machen können und wie Sie ihn verwenden.
Springen Sie zu:
Die Unterstützung des Datentyps String war eine der von den Benutzern am meisten erwarteten Funktionen. Sie rationalisiert sowohl den Prozess der Erstellung einer Anwendung mit der Milvus-Vektordatenbank als auch die Geschwindigkeit der Ähnlichkeitssuche und der Vektorabfrage, wodurch die Effizienz erheblich gesteigert und die Wartungskosten der Anwendung, an der Sie arbeiten, reduziert werden.
Milvus 2.1 unterstützt insbesondere den VARCHAR-Datentyp, der Zeichenketten unterschiedlicher Länge speichert. Mit der Unterstützung des VARCHAR-Datentyps können Sie:
- Direkte Verwaltung von Zeichenkettendaten ohne die Hilfe einer externen relationalen Datenbank.
Die Unterstützung des VARCHAR-Datentyps ermöglicht es Ihnen, beim Einfügen von Daten in Milvus den Schritt der Konvertierung von Zeichenketten in andere Datentypen zu überspringen. Nehmen wir an, Sie arbeiten an einem Buchsuchsystem für Ihren eigenen Online-Buchladen. Sie erstellen einen Buchdatensatz und möchten die Bücher mit ihren Namen identifizieren. Während Milvus in früheren Versionen den String-Datentyp nicht unterstützt, müssen Sie vor dem Einfügen von Daten in Milvus die Strings (die Namen der Bücher) mit Hilfe einer relationalen Datenbank wie MySQL in Buch-IDs umwandeln. Da jetzt der Datentyp String unterstützt wird, können Sie einfach ein Stringfeld erstellen und die Buchnamen anstelle der ID-Nummern direkt eingeben.
Die Bequemlichkeit gilt auch für den Such- und Abfrageprozess. Stellen Sie sich vor, es gibt einen Kunden, dessen Lieblingsbuch "Hallo Milvus" ist. Sie möchten im System nach ähnlichen Büchern suchen und sie dem Kunden empfehlen. In früheren Versionen von Milvus liefert Ihnen das System nur Buch-IDs, und Sie müssen einen zusätzlichen Schritt unternehmen, um die entsprechenden Buchinformationen in einer relationalen Datenbank zu überprüfen. In Milvus 2.1 können Sie jedoch die Buchnamen direkt abrufen, da Sie bereits ein String-Feld mit den Buchnamen darin erstellt haben.
Mit einem Wort, die Unterstützung des String-Datentyps erspart Ihnen den Aufwand, sich an andere Tools zu wenden, um String-Daten zu verwalten, was den Entwicklungsprozess erheblich vereinfacht.
- Beschleunigen Sie die Geschwindigkeit der hybriden Suche und der Vektorabfrage durch Attributfilterung.
Wie andere skalare Datentypen kann VARCHAR für die Attributfilterung in der hybriden Suche und Vektorabfrage durch boolesche Ausdrücke verwendet werden. Besonders erwähnenswert ist, dass Milvus 2.1 den Operator like
hinzufügt, der es Ihnen ermöglicht, ein Präfix-Matching durchzuführen. Außerdem können Sie mit dem Operator ==
ein exaktes Matching durchführen.
Außerdem wird ein MARISA-trie-basierter invertierter Index unterstützt, um die hybride Suche und Abfrage zu beschleunigen. Lesen Sie weiter und erfahren Sie alles über die String-Ausdrücke, die Sie kennen sollten, um die Attributfilterung mit String-Daten durchzuführen.
Wir wissen jetzt, dass der String-Datentyp extrem nützlich ist, aber wann genau müssen wir diesen Datentyp bei der Erstellung unserer eigenen Anwendungen verwenden? Im Folgenden sehen Sie einige Code-Beispiele für Szenarien, die String-Daten beinhalten können, die Ihnen ein besseres Verständnis für die Verwaltung von VARCHAR-Daten in Milvus 2.1 vermitteln.
Erstellen Sie eine Sammlung
Lassen Sie uns dem vorherigen Beispiel folgen. Sie arbeiten immer noch an dem Buchempfehlungssystem und möchten eine Buchsammlung mit einem Primärschlüsselfeld namens book_name
erstellen, in das Sie Zeichenkettendaten einfügen werden. In diesem Fall können Sie den Datentyp als DataType.VARCHAR
festlegen, wenn Sie das Feldschema einstellen, wie im folgenden Beispiel gezeigt.
Beachten Sie, dass Sie bei der Erstellung eines VARCHAR-Feldes die maximale Zeichenlänge über den Parameter max_length
angeben müssen, dessen Wert zwischen 1 und 65.535 liegen kann. In diesem Beispiel haben wir die maximale Länge auf 200 festgelegt.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
is_primary=True,
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, word_count, book_intro],
description="Test book search"
)
collection_name = "book"
Daten einfügen
Nun, da die Sammlung erstellt ist, können wir Daten in sie einfügen. Im folgenden Beispiel fügen wir 2.000 Zeilen mit zufällig generierten Zeichenketten ein.
import random
data = [
[i for i in range(2000)],
["book_" + str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
]
Daten löschen
Angenommen, zwei Bücher mit den Namen book_0
und book_1
sind in Ihrem Shop nicht mehr verfügbar, so dass Sie die entsprechenden Informationen aus Ihrer Datenbank löschen möchten. In diesem Fall können Sie den Termausdruck in
verwenden, um die zu löschenden Entitäten zu filtern, wie im folgenden Beispiel gezeigt.
Denken Sie daran, dass Milvus nur das Löschen von Entitäten mit eindeutig spezifizierten Primärschlüsseln unterstützt. Bevor Sie also den folgenden Code ausführen, stellen Sie sicher, dass Sie das Feld book_name
als Primärschlüsselfeld festgelegt haben.
expr = "book_name in [\"book_0\", \"book_1\"]"
from pymilvus import Collection
collection = Collection("book")
collection.delete(expr)
Einen Index erstellen
Milvus 2.1 unterstützt den Aufbau von skalaren Indizes, was die Filterung von String-Feldern erheblich beschleunigt. Im Gegensatz zur Erstellung eines Vektorindexes müssen Sie vor der Erstellung eines skalaren Indexes keine Parameter vorbereiten. Milvus unterstützt vorübergehend nur den Dictionary Tree (MARISA-trie) Index, so dass der Indextyp eines VARCHAR-Feldes standardmäßig MARISA-trie ist.
Sie können den Indexnamen beim Erstellen des Indexes angeben. Wenn er nicht angegeben wird, lautet der Standardwert von index_name
"_default_idx_"
. Im folgenden Beispiel haben wir den Index scalar_index
genannt.
from pymilvus import Collection
collection = Collection("book")
collection.create_index(
field_name="book_name",
index_name="scalar_index",
)
Hybride Suche
Durch die Angabe von booleschen Ausdrücken können Sie die String-Felder während einer Vektorähnlichkeitssuche filtern.
Wenn Sie beispielsweise nach Büchern suchen, deren Intro Hello Milvus am ähnlichsten ist, aber nur die Bücher erhalten möchten, deren Namen mit "book_2" beginnen, können Sie den Operator like
verwenden, um eine Präfix-Übereinstimmung durchzuführen und die gewünschten Bücher zu erhalten, wie im folgenden Beispiel gezeigt.
search_param = {
"data": [[0.1, 0.2]],
"anns_field": "book_intro",
"param": {"metric_type": "L2", "params": {"nprobe": 10}},
"limit": 2,
"expr": "book_name like \"Hello%\"",
}
res = collection.search(**search_param)
String-Ausdrücke
Neben dem neu hinzugefügten Operator like
können auch andere Operatoren, die bereits in früheren Versionen von Milvus unterstützt wurden, für die Filterung von Stringfeldern verwendet werden. Im Folgenden finden Sie einige Beispiele für häufig verwendete String-Ausdrücke, wobei A
ein Feld vom Typ VARCHAR darstellt. Denken Sie daran, dass alle unten aufgeführten String-Ausdrücke mit logischen Operatoren wie AND, OR und NOT logisch kombiniert werden können.
Mengenoperationen
Sie können in
und not in
verwenden, um Mengenoperationen zu realisieren, wie z. B. A in ["str1", "str2"]
.
Vergleich zweier Stringfelder
Sie können relationale Operatoren verwenden, um die Werte von zwei Stringfeldern zu vergleichen. Solche relationalen Operatoren sind ==
, !=
, >
, >=
, <
, <=
. Weitere Informationen finden Sie unter Relationale Operatoren.
Beachten Sie, dass Zeichenfolgenfelder nur mit anderen Zeichenfolgenfeldern und nicht mit Feldern anderer Datentypen verglichen werden können. Zum Beispiel kann ein Feld vom Typ VARCHAR nicht mit einem Feld vom Typ Boolean oder vom Typ Integer verglichen werden.
Vergleich eines Felds mit einem konstanten Wert
Sie können ==
oder !=
verwenden, um zu überprüfen, ob der Wert eines Felds gleich einem konstanten Wert ist.
Filtern von Feldern mit einem einzigen Bereich
Sie können >
, >=
, <
, <=
verwenden, um Zeichenkettenfelder mit einem einzigen Bereich zu filtern, z. B. A > "str1"
.
Präfix-Abgleich
Wie bereits erwähnt, fügt Milvus 2.1 den Operator like
für den Präfixabgleich hinzu, z. B. A like "prefix%"
.
Was kommt als Nächstes?
Mit der offiziellen Freigabe von Milvus 2.1 haben wir eine Reihe von Blogs vorbereitet, in denen die neuen Funktionen vorgestellt werden. Lesen Sie mehr in dieser Blogserie:
- Wie Sie String-Daten nutzen, um Ihre Anwendungen für die Ähnlichkeitssuche zu verbessern
- Verwendung von Embedded Milvus zur sofortigen Installation und Ausführung von Milvus mit Python
- Erhöhen Sie den Lesedurchsatz Ihrer Vektordatenbank mit In-Memory-Replikaten
- Verständnis der Konsistenzebene in der Milvus-Vektordatenbank
- Verständnis der Konsistenzstufe in der Milvus-Vektordatenbank (Teil II)
- Wie gewährleistet die Milvus-Vektor-Datenbank die Datensicherheit?
- Erstellen Sie eine Sammlung
- Daten einfügen
- Daten löschen
- Einen Index erstellen
- Hybride Suche
- String-Ausdrücke
- Was kommt als Nächstes?
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word