🚀 Was ist neu bei der Metadatenfilterung in Milvus v2.4.3
Milvus v2.4.3 führte vollständiges String-Metadaten-Matching ein! 🎉 Jetzt können Sie Strings mithilfe von Präfix-, Infix-, Postfix- oder sogar Zeichen-Wildcard-Suchen abgleichen.
# Prefix example, matches any string starting with “The”.
expression='title like "The%"'
# Infix example, matches any string with the word “the” anywhere in the sentence.
expression='title like "%the%"'
# Postfix example, matches any string ending with “Rye”.
expression='title like "%Rye"'
# Single character wildcard example, matches any one single character at a specific position.
expression='title like "Flip_ed"'
In früheren Blogs haben wir nur über Präfix-String-Matching gesprochen. Seit Milvus v2.4.3 sind jedoch auch alle Varianten möglich, ebenso wie die Verwendung von Array-Werten, entweder durch exakte Treffer oder durch die Prüfung, ob beliebige Elemente im Array übereinstimmen (contains_any()). 🗂️🔍
Diese Updates machen die Metadatenfilterung vielseitiger und leistungsfähiger!
Lassen Sie uns all das anhand eines Beispiels klarer machen. Ich verwende für diesen Blog IMDB-Filmdaten, die ich von Kaggle heruntergeladen habe.
# Import common libraries.
import sys, os, time, pprint
import pandas as pd
# Read CSV data.
df = pd.read_csv("data/original_data.csv")
# Shortcut the data for demo.
df = df.tail(200)
display(df.head())
Jeder Film hat ein „text“-Feld mit seiner Beschreibung und Rezensionen. 📝
Jeder Film enthält Metadaten wie das Erscheinungsjahr, die Bewertung und Listen von Genres, Schauspielern und Schlüsselwörtern. 🎬⭐️📅
Jede „Zeile“ stellt einen Textabschnitt einer Filmrezension, seine Vektordarstellung und Metadaten wie movie_id, Filmtitel, Poster-Link, Genres und Schauspieler dar.
Nach dem üblichen RAG-Muster: 📝🎬
Mit Milvus verbinden: Verbinden Sie sich zuerst mit Milvus Lite, der lokalen Bereitstellung von Milvus. Dies ist unsere Datenbank zum Speichern und Verwalten von Vektoren. 🖥️🔗
Filmtext in Vektoren umwandeln: Nehmen Sie das Textfeld jedes Films, das die Beschreibung und Rezension enthält, und wandeln Sie es in einen Vektor um. Dafür verwenden wir das HuggingFace-Modell BAAI/bge-large-en-v1.5. 🧠➡️📏
📥📊 Vektoren und Metadaten in Milvus einfügen: Fügen Sie diesen Vektor zusammen mit dem Originaltext (dem sogenannten „Chunk“) und seinen Metadaten (wie Jahr, Bewertung, Genres usw.) in Milvus ein. 📥📊
Benutzeranfragen verarbeiten: Wandeln Sie die Anfrage des Benutzers mit demselben Embedding-Modell in einen Vektor um. Führen Sie dann eine Approximate-Nearest-Neighbors-Suche aus, um die Datenvektoren zu finden, die dem Anfragevektor am nächsten liegen. 🔍🎬
Den vollständigen Code finden Sie auf meinem GitHub.
Verbinden Sie sich zuerst mit Milvus. Sie müssen Pymilvus per pip installieren. (Wenn Sie nur einen lokalen Dateinamen angeben, wird Milvus Lite verwendet, eine lokale Vektordatenbank. Wenn Sie anderes Milvus haben, z. B. über Docker oder K8s bereitgestellt oder vollständig verwaltetes Zilliz Cloud, können Sie die URI und das Token angeben, um sich damit zu verbinden. Der restliche Code funktioniert genauso.)
# !python -m pip install -U pymilvus
import pymilvus
# Connect a client to the Milvus Lite server.
from pymilvus import MilvusClient
client = MilvusClient("milvus_demo.db")
Als Nächstes wird die Textspalte, die die Filmrezension enthält, in Chunks aufgeteilt und in Vektoren eingebettet. Viele Ressourcen geben Beispiele dafür, wie man das macht, daher werde ich den Code hier nicht erneut zeigen. Unten zeige ich, wie man den gechunkten Text, die Vektordarstellung und die Metadaten zusammenstellt und die Daten in Milvus einfügt.
# Create chunk_list and dict_list in a single loop
dict_list = []
for id, title, chunk, vector, poster_url, director,\
genres, actors, keywords, film_year, rating in zip(
df.id, df.Name, chunks, converted_values, df.PosterLink,
df.Director, df.Genres, df.Actors, df.Keywords,
df.MovieYear, df.RatingValue):
# Assemble embedding vector, original text chunk, metadata.
chunk_dict = {
'movie_index': id,
'title': title,
'chunk': chunk.page_content,
'poster_url': poster_url,
'director': director,
'genres': genres,
'actors': actors,
'keywords': keywords,
'film_year': film_year,
'rating': rating,
'vector': vector,
}
dict_list.append(chunk_dict)
# Insert data into the Milvus collection.
print("Start inserting entities")
start_time = time.time()
client.insert(
COLLECTION_NAME,
data=dict_list,
progress_bar=True)
end_time = time.time()
print(f"Milvus insert time for {len(dict_list)} vectors: ", end="")
print(f"{np.round(end_time - start_time, 2)} seconds")
Jetzt, da die Daten in Milvus sind, können wir suchen!
Suche mit String-Metadatenfiltern
Nehmen wir an, wir möchten Sci-Fi-Filme finden, die eine dystopische Zukunft mit Robotern zeigen und hoch bewertet sind. Unsere Beispieldaten enthalten Metadaten, die wir für diese Suche verwenden können.
Hier ist ein Beispiel für Metadatenfilterung mit fuzzy String-Übereinstimmungen. Unten habe ich die vanilla Milvus search API nur umschlossen, um Metadaten nach jeder Suche einfacher anzuzeigen.
SAMPLE_QUESTION = "Dystopia science fiction with a robot."
TOP_K = 1
# Metadata filters.
expression='rating >= 7'
# Infix string match.
expression=expression + ' && title like "%Panther%"'
formatted_results, contexts, context_metadata = \
mc_run_search(SAMPLE_QUESTION, expression, TOP_K)
Ressourcen und weiterführende Lektüre
Array-Felder verwenden | Milvus-Dokumentation
https://github.com/milvus-io/pymilvus/blob/2.4/examples/fuzzy_match.py
https://milvus.io/docs/boolean.md#Usage
https://milvus.io/docs/single-vector-search.md#Filtered-search
Weiterlesen

We spent 8 years making vector databases faster. Then we stopped.
Rarely queried embeddings still need to stay searchable. See how Vector Lakebase enables on-demand vector search without always-on compute costs.

How Zilliz Ended Up at the Center of NVIDIA’s Unstructured Data Story at GTC 2026
If unstructured data is the context of AI, then the ceiling of AI applications will be set not just by models, but by how mature the infrastructure for unstructured data becomes.

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.



