Phrase Match mit Slop in Milvus 2.6: Wie man die Genauigkeit der Volltextsuche auf Phrase-Ebene verbessert
Da unstrukturierte Daten weiterhin explodieren und KI-Modelle immer intelligenter werden, ist die Vektorsuche zur Standardabrufebene für viele KI-Systeme geworden - RAG-Pipelines, KI-Suche, Agenten, Empfehlungsmaschinen und mehr. Sie funktioniert, weil sie die Bedeutung erfasst: nicht nur die Wörter, die Benutzer eingeben, sondern auch die Absicht dahinter.
Sobald diese Anwendungen jedoch in Produktion gehen, stellen die Teams oft fest, dass das semantische Verständnis nur eine Seite des Abrufproblems ist. Viele Arbeitsabläufe hängen auch von strengen Textregeln ab, wie z. B. der exakten Terminologie, der Einhaltung der Wortreihenfolge oder der Identifizierung von Phrasen, die eine technische, rechtliche oder betriebliche Bedeutung haben.
Milvus 2.6 hebt diese Trennung auf, indem es eine native Volltextsuche direkt in die Vektordatenbank einführt. Mit Token- und Positionsindizes, die in die Kern-Engine integriert sind, kann Milvus die semantische Absicht einer Anfrage interpretieren und gleichzeitig präzise Einschränkungen auf Schlüsselwort- und Phrasenebene durchsetzen. Das Ergebnis ist eine einheitliche Retrieval-Pipeline, in der sich Bedeutung und Struktur gegenseitig verstärken, anstatt in getrennten Systemen zu leben.
Phrase Match ist ein wichtiger Bestandteil dieser Volltextfunktion. Es identifiziert Sequenzen von Begriffen, die zusammen und in der richtigen Reihenfolge auftreten - wichtig für die Erkennung von Protokollmustern, Fehlersignaturen, Produktnamen und jedem Text, in dem die Wortreihenfolge die Bedeutung definiert. In diesem Beitrag erklären wir, wie Phrase Match in Milvus funktioniert, wie slop die für realen Text erforderliche Flexibilität hinzufügt und warum diese Funktionen eine hybride Vektor-Volltextsuche innerhalb einer einzigen Datenbank nicht nur möglich, sondern praktisch machen.
Was ist Phrase Match?
Phrase Match ist ein Volltext-Abfragetyp in Milvus, der sich auf die Strukturkonzentriert , d. h.darauf, ob eine Folge von Wörtern in einem Dokument in der gleichen Reihenfolge erscheint. Wenn keine Flexibilität erlaubt ist, verhält sich die Abfrage streng: die Begriffe müssen nebeneinander und in der richtigen Reihenfolge erscheinen. Eine Abfrage wie "Robotik, maschinelles Lernen" passt daher nur, wenn diese drei Wörter als zusammenhängende Phrase vorkommen.
Die Herausforderung besteht darin, dass sich echter Text selten so sauber verhält. Natürliche Sprache führt zu Rauschen: Zusätzliche Adjektive schleichen sich ein, Protokolle ordnen Felder neu an, Produktnamen erhalten Modifikatoren, und menschliche Autoren schreiben nicht mit Blick auf Abfragemaschinen. Eine strenge Phrasenübereinstimmung wird leicht gebrochen - ein eingefügtes Wort, eine Umformulierung oder ein vertauschter Begriff kann einen Fehler verursachen. Und in vielen KI-Systemen, insbesondere in produktionsnahen Systemen, ist das Fehlen einer relevanten Protokollzeile oder eines die Regel auslösenden Satzes nicht akzeptabel.
Milvus 2.6 begegnet dieser Reibung mit einem einfachen Mechanismus: Slop. Slop definiert den Spielraum, der zwischen den Abfragebegriffen erlaubt ist. Anstatt eine Phrase als spröde und unflexibel zu behandeln, können Sie mit Slop entscheiden, ob ein zusätzliches Wort toleriert werden kann, oder zwei, oder sogar, ob eine geringfügige Umordnung noch als Übereinstimmung zählen soll. Damit wird die Phrasensuche von einem binären Test (bestanden/nicht bestanden) zu einem kontrollierten, einstellbaren Suchwerkzeug.
Um zu verstehen, warum dies wichtig ist, stellen Sie sich vor, Sie suchen in den Protokollen nach allen Varianten des bekannten Netzwerkfehlers "connection reset by peer". In der Praxis könnten Ihre Protokolle wie folgt aussehen:
connection reset by peer
connection fast reset by peer
connection was suddenly reset by the peer
peer reset connection by ...
peer unexpected connection reset happened
Auf den ersten Blick handelt es sich bei allen um dasselbe Ereignis. Aber die üblichen Suchmethoden haben Schwierigkeiten:
BM25 kämpft mit der Struktur.
Es betrachtet die Abfrage als eine Ansammlung von Schlüsselwörtern und ignoriert die Reihenfolge, in der sie erscheinen. Solange "connection" und "peer" irgendwo auftauchen, kann BM25 das Dokument hoch einstufen - selbst wenn die Phrase invertiert ist oder nichts mit dem Konzept zu tun hat, nach dem Sie eigentlich suchen.
Die Vektorsuche hat mit Einschränkungen zu kämpfen.
Einbettungen eignen sich hervorragend zum Erfassen von Bedeutung und semantischen Beziehungen, aber sie können keine Regel wie "diese Wörter müssen in dieser Reihenfolge erscheinen" durchsetzen. Sie können zwar semantisch verwandte Nachrichten abrufen, aber dennoch das genaue Strukturmuster vermissen, das für die Fehlersuche oder die Einhaltung von Vorschriften erforderlich ist.
Phrase Match füllt die Lücke zwischen diesen beiden Ansätzen. Durch die Verwendung von Slop können Sie genau angeben, wie viel Abweichung akzeptabel ist:
slop = 0- Exakte Übereinstimmung (Alle Begriffe müssen zusammenhängend und in der richtigen Reihenfolge vorkommen.)slop = 1- Ein zusätzliches Wort zulassen (Deckt häufige Variationen in der natürlichen Sprache mit einem einzigen eingefügten Begriff ab).slop = 2- Mehrere eingefügte Wörter zulassen (für beschreibendere oder ausführlichere Formulierungen).slop = 3- Umordnung zulassen (Unterstützt umgekehrte oder lose geordnete Sätze, was in der Praxis oft der schwierigste Fall ist).
Anstatt zu hoffen, dass der Bewertungsalgorithmus "alles richtig macht", geben Sie explizit die strukturelle Toleranz an, die Ihre Anwendung erfordert.
Wie Phrase Match in Milvus funktioniert
Phrase Match in Milvus basiert auf der Tantivy-Suchmaschinenbibliothek und ist auf der Grundlage eines invertierten Index mit Positionsinformationen implementiert. Anstatt nur zu prüfen, ob Begriffe in einem Dokument vorkommen, wird überprüft, ob sie in der richtigen Reihenfolge und innerhalb eines kontrollierbaren Abstands erscheinen.
Das folgende Diagramm veranschaulicht den Prozess:
1. Tokenisierung von Dokumenten (mit Positionen)
Wenn Dokumente in Milvus eingefügt werden, werden die Textfelder von einem Analysator verarbeitet, der den Text in Token (Wörter oder Begriffe) zerlegt und die Position jedes Tokens innerhalb des Dokuments aufzeichnet. Zum Beispiel wird doc_1 in Token zerlegt als: machine (pos=0), learning (pos=1), boosts (pos=2), efficiency (pos=3).
2. Erstellung eines invertierten Index
Als nächstes erstellt Milvus einen invertierten Index. Anstatt Dokumente ihrem Inhalt zuzuordnen, ordnet der invertierte Index jedes Token den Dokumenten zu, in denen es vorkommt, zusammen mit allen aufgezeichneten Positionen dieses Tokens innerhalb jedes Dokuments.
3. Phrase Matching
Wenn eine Phrasenabfrage ausgeführt wird, verwendet Milvus zunächst den invertierten Index, um Dokumente zu identifizieren, die alle Token der Abfrage enthalten. Anschließend wird jeder Kandidat durch einen Vergleich der Tokenpositionen validiert, um sicherzustellen, dass die Begriffe in der richtigen Reihenfolge und innerhalb des zulässigen Abstands slop erscheinen. Nur Dokumente, die beide Bedingungen erfüllen, werden als Treffer zurückgegeben.
Das folgende Diagramm fasst zusammen, wie Phrase Match durchgängig funktioniert.
So aktivieren Sie Phrase Match in Milvus
Phrase Match funktioniert mit Feldern des Typs VARCHARist der String-Typ in Milvus. Um es zu verwenden, müssen Sie Ihr Sammlungsschema so konfigurieren, dass Milvus eine Textanalyse durchführt und Positionsinformationen für das Feld speichert. Dies geschieht durch die Aktivierung von zwei Parametern: enable_analyzer und enable_match.
Aktivieren Sie enable_analyzer und enable_match
Um Phrase Match für ein bestimmtes VARCHAR-Feld zu aktivieren, setzen Sie beide Parameter bei der Definition des Feldschemas auf True. Zusammen weisen sie Milvus an,:
den Textzu tokenisieren (über
enable_analyzer), undeinen invertierten Index mit Positionsoffsets zu erstellen (über
enable_match).
Phrase Match stützt sich auf beide Schritte: Der Analysator zerlegt den Text in Token, und der Match-Index speichert, wo diese Token erscheinen, was effiziente phrasen- und slop-basierte Abfragen ermöglicht.
Nachfolgend ein Beispiel für eine Schemakonfiguration, die Phrase Match für ein Feld text aktiviert:
from pymilvus import MilvusClient, DataType
schema = MilvusClient.create_schema(enable_dynamic_field=False)
schema.add_field(
field_name=“id”,
datatype=DataType.INT64,
is_primary=True,
auto_id=True
)
schema.add_field(
field_name=‘text’, # Name of the field
datatype=DataType.VARCHAR, # Field data type set as VARCHAR (string)
max_length=1000, # Maximum length of the string
enable_analyzer=True, # Enables text analysis (tokenization)
enable_match=True # Enables inverted indexing for phrase matching
)
schema.add_field(
field_name=“embeddings”,
datatype=DataType.FLOAT_VECTOR,
dim=5
)
Suche mit Phrase Match: Wie Slop den Kandidatensatz beeinflusst
Sobald Sie den Abgleich für ein VARCHAR-Feld in Ihrem Auflistungsschema aktiviert haben, können Sie Phrasenabgleiche mit dem Ausdruck PHRASE_MATCH durchführen.
Hinweis: Beim PHRASE_MATCH -Ausdruck wird die Groß-/Kleinschreibung nicht berücksichtigt. Sie können entweder PHRASE_MATCH oder phrase_match verwenden.
Bei Suchvorgängen wird die Phrasenübereinstimmung in der Regel vor der Vektorähnlichkeitsbewertung angewendet. Zunächst werden die Dokumente auf der Grundlage expliziter textlicher Einschränkungen gefiltert, wodurch die Kandidatengruppe eingegrenzt wird. Die verbleibenden Dokumente werden dann mithilfe von Vektoreinbettungen neu eingestuft.
Das folgende Beispiel zeigt, wie verschiedene slop Werte diesen Prozess beeinflussen. Durch die Anpassung des Parameters slop können Sie direkt steuern, welche Dokumente den Phrasenfilter passieren und mit der Vektor-Ranking-Phase fortfahren.
Angenommen, Sie haben eine Sammlung mit dem Namen tech_articles, die die folgenden fünf Entitäten enthält:
| doc_id | text |
|---|---|
| 1 | Maschinelles Lernen steigert die Effizienz bei der Analyse großer Datenmengen |
| 2 | Das Erlernen eines maschinenbasierten Ansatzes ist für den Fortschritt der modernen KI unerlässlich |
| 3 | Maschinenarchitekturen für maschinelles Lernen optimieren die Rechenlast |
| 4 | Maschinen verbessern schnell die Modellleistung für kontinuierliches Lernen |
| 5 | Das Erlernen fortschrittlicher Maschinenalgorithmen erweitert die KI-Fähigkeiten |
slop=1
Hier erlauben wir einen Slop von 1. Der Filter wird auf Dokumente angewandt, die den Ausdruck "Lernmaschine" enthalten, wobei eine leichte Flexibilität besteht.
# Example: Filter documents containing "learning machine" with slop=1
filter_slop1 = "PHRASE_MATCH(text, 'learning machine', 1)"
result_slop1 = client.search(
collection_name=“tech_articles”,
anns_field=“embeddings”,
data=[query_vector],
filter=filter_slop1,
search_params={“params”: {“nprobe”: 10}},
limit=10,
output_fields=[“id”, “text”]
)
Ergebnisse der Übereinstimmung:
| doc_id | Text |
|---|---|
| 2 | Das Erlernen eines maschinenbasierten Ansatzes ist für den Fortschritt der modernen KI unerlässlich |
| 3 | Deep Learning-Maschinenarchitekturen optimieren die Rechenlast |
| 5 | Das Erlernen fortgeschrittener maschineller Algorithmen erweitert die Fähigkeiten der KI |
slop=2
In diesem Beispiel ist ein Slop von 2 erlaubt, was bedeutet, dass bis zu zwei zusätzliche Token (oder umgekehrte Begriffe) zwischen den Wörtern "Maschine" und "Lernen" erlaubt sind.
# Example: Filter documents containing "machine learning" with slop=2
filter_slop2 = "PHRASE_MATCH(text, 'machine learning', 2)"
result_slop2 = client.search(
collection_name=“tech_articles”,
anns_field=“embeddings”, # Vector field name
data=[query_vector], # Query vector
filter=filter_slop2, # Filter expression
search_params={“params”: {“nprobe”: 10}},
limit=10, # Maximum results to return
output_fields=[“id”, “text”]
)
Übereinstimmungsergebnisse:
| doc_id | Text |
|---|---|
| 1 | Maschinelles Lernen steigert die Effizienz bei der Analyse großer Datenmengen |
| 3 | Maschinenarchitekturen für maschinelles Lernen optimieren die Rechenlast |
slop=3
In diesem Beispiel sorgt ein Slop von 3 für noch mehr Flexibilität. Der Filter sucht nach "maschinellem Lernen", wobei bis zu drei Tokenpositionen zwischen den Wörtern zulässig sind.
# Example: Filter documents containing "machine learning" with slop=3
filter_slop3 = "PHRASE_MATCH(text, 'machine learning', 3)"
result_slop2 = client.search(
collection_name=“tech_articles”,
anns_field=“embeddings”, # Vector field name
data=[query_vector], # Query vector
filter=filter_slop3, # Filter expression
search_params={“params”: {“nprobe”: 10}},
limit=10, # Maximum results to return
output_fields=[“id”, “text”]
)
Ergebnisse der Suche:
| doc_id | Text |
|---|---|
| 1 | Maschinelles Lernen steigert die Effizienz bei der Analyse großer Datenmengen |
| 2 | Das Erlernen eines maschinenbasierten Ansatzes ist für den Fortschritt der modernen KI unerlässlich |
| 3 | Maschinenarchitekturen für maschinelles Lernen optimieren die Rechenlast |
| 5 | Das Erlernen fortgeschrittener maschineller Algorithmen erweitert die KI-Fähigkeiten |
Schnelle Tipps: Was Sie vor dem Aktivieren von Phrase Match in Milvus wissen müssen
Phrase Match bietet Unterstützung für Filterung auf Phrasenebene, aber die Aktivierung erfordert mehr als nur die Konfiguration zur Abfragezeit. Es ist hilfreich, sich über die damit verbundenen Überlegungen im Klaren zu sein, bevor man sie in einer Produktionsumgebung anwendet.
Durch die Aktivierung von Phrase Match für ein Feld wird ein invertierter Index erstellt, der die Speichernutzung erhöht. Die genauen Kosten hängen von Faktoren wie der Textlänge, der Anzahl der eindeutigen Token und der Konfiguration des Analysators ab. Bei der Arbeit mit großen Textfeldern oder Daten mit hoher Kardinalität sollte dieser Mehraufwand im Voraus berücksichtigt werden.
Die Konfiguration des Analysators ist eine weitere wichtige Designentscheidung. Sobald ein Analysator im Sammlungsschema definiert ist, kann er nicht mehr geändert werden. Um später zu einem anderen Analysator zu wechseln, muss die vorhandene Sammlung gelöscht und mit einem neuen Schema neu erstellt werden. Aus diesem Grund sollte die Auswahl des Analysators als langfristige Entscheidung und nicht als Experiment betrachtet werden.
Das Verhalten von Phrase Match ist eng mit der Tokenisierung des Textes verbunden. Bevor Sie einen Analyzer auf eine ganze Sammlung anwenden, empfiehlt es sich, die Methode
run_analyzerzu verwenden, um die Tokenisierungsausgabe zu prüfen und zu bestätigen, dass sie Ihren Erwartungen entspricht. Dieser Schritt kann dazu beitragen, subtile Unstimmigkeiten und unerwartete Abfrageergebnisse zu vermeiden. Weitere Informationen finden Sie unter Analyzer-Übersicht.
Schlussfolgerung
Phrase Match ist ein zentraler Volltext-Suchtyp, der über den einfachen Abgleich von Schlüsselwörtern hinaus Einschränkungen auf Satz- und Positionsebene ermöglicht. Durch die Verwendung von Tokenreihenfolge und -nähe bietet er eine vorhersehbare und präzise Möglichkeit, Dokumente auf der Grundlage des tatsächlichen Vorkommens von Begriffen im Text zu filtern.
In modernen Retrievalsystemen wird Phrase Match in der Regel vor einem vektorbasierten Ranking angewendet. Dabei wird die Kandidatenmenge zunächst auf Dokumente eingeschränkt, die explizit den erforderlichen Phrasen oder Strukturen entsprechen. Die Vektorsuche wird dann verwendet, um diese Ergebnisse nach semantischer Relevanz zu ordnen. Dieses Muster ist besonders effektiv in Szenarien wie der Protokollanalyse, der Suche nach technischer Dokumentation und RAG-Pipelines, wo textuelle Einschränkungen durchgesetzt werden müssen, bevor die semantische Ähnlichkeit berücksichtigt wird.
Mit der Einführung des slop Parameters in Milvus 2.6 wird Phrase Match toleranter gegenüber Variationen in der natürlichen Sprache und behält gleichzeitig seine Rolle als Volltext-Filtermechanismus. Dies erleichtert die Anwendung von Beschränkungen auf Phrasenebene in produktiven Retrieval-Workflows.
Probieren Sie es mit den Demo-Skripten aus, und erkunden Sie Milvus 2.6, um zu sehen, wie phrase-aware Retrieval in Ihren Stack passt.
Haben Sie Fragen oder möchten Sie eine Funktion des neuesten Milvus näher kennenlernen? Treten Sie unserem Discord-Kanal bei oder melden Sie Probleme auf GitHub. Sie können auch eine 20-minütige persönliche Sitzung buchen, um Einblicke, Anleitung und Antworten auf Ihre Fragen über die Milvus Office Hours zu erhalten.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



