đ NouveautĂ©s du filtrage des mĂ©tadonnĂ©es dans Milvus v2.4.3
Milvus v2.4.3 a introduit la correspondance de mĂ©tadonnĂ©es sur chaĂźne complĂšte ! đ DĂ©sormais, vous pouvez faire correspondre des chaĂźnes Ă lâaide de recherches par prĂ©fixe, infixe, suffixe, ou mĂȘme avec caractĂšre gĂ©nĂ©rique.
# 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"'
Dans des blogs prĂ©cĂ©dents, nous nâavions parlĂ© que de la correspondance de chaĂźnes par prĂ©fixe. Cependant, depuis Milvus v2.4.3, toutes les variantes sont Ă©galement possibles, tout comme lâutilisation de valeurs de tableau, soit par correspondances exactes, soit en vĂ©rifiant si des Ă©lĂ©ments du tableau correspondent (contains_any()). đïžđ
Ces mises à jour rendent le filtrage des métadonnées plus polyvalent et plus puissant !
Rendons tout cela plus clair avec un exemple. Pour ce blog, jâutiliserai les donnĂ©es de films IMDB, que jâai tĂ©lĂ©chargĂ©es depuis Kaggle.
# 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())
Chaque film possĂšde un champ âtextâ avec sa description et ses critiques. đ
Chaque film inclut des mĂ©tadonnĂ©es comme lâannĂ©e de sortie, la note, ainsi que des listes de genres, dâacteurs et de mots-clĂ©s. đŹâïžđ
Chaque âligneâ reprĂ©sente un fragment de texte dâune critique de film, sa reprĂ©sentation vectorielle et des mĂ©tadonnĂ©es telles que movie_id, le titre du film, le lien de lâaffiche, les genres et les acteurs.
En suivant le modĂšle habituel de RAG : đđŹ
Se connecter Ă Milvus : Tout dâabord, connectez-vous Ă Milvus Lite, le dĂ©ploiement local de Milvus. Câest notre base de donnĂ©es pour stocker et gĂ©rer les vecteurs. đ„ïžđ
Transformer le texte des films en vecteurs : Prenez le champ texte de chaque film, qui inclut la description et la critique, et transformez-le en vecteur. Nous utiliserons le modĂšle HuggingFace BAAI/bge-large-en-v1.5 pour cela. đ§ âĄïžđ
đ„đ InsĂ©rer les vecteurs et les mĂ©tadonnĂ©es dans Milvus : InsĂ©rez ce vecteur, avec le texte dâorigine (appelĂ© le âchunkâ) et ses mĂ©tadonnĂ©es (comme lâannĂ©e, la note, les genres, etc.) dans Milvus. đ„đ
GĂ©rer les requĂȘtes utilisateur : Transformez la requĂȘte de lâutilisateur en vecteur Ă lâaide du mĂȘme modĂšle dâembedding. Ensuite, lancez une recherche des plus proches voisins approximatifs pour trouver les vecteurs de donnĂ©es les plus proches du vecteur de requĂȘte. đđŹ
Vous pouvez trouver le code complet sur mon GitHub.
Tout dâabord, connectez-vous Ă Milvus. Vous devrez installer Pymilvus avec pip. (En spĂ©cifiant simplement un nom de fichier local, il utilise Milvus Lite, une base de donnĂ©es vectorielle locale. Si vous avez un autre Milvus, par exemple dĂ©ployĂ© avec docker ou K8s, ou Zilliz Cloud entiĂšrement managĂ©, vous pouvez spĂ©cifier lâURI et le Token pour vous y connecter. Le reste du code fonctionne de la mĂȘme maniĂšre.)
# !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")
Ensuite, segmentez et vectorisez la colonne de texte contenant la critique de film en vecteurs. De nombreuses ressources donnent des exemples de la maniÚre de procéder, je ne montrerai donc pas à nouveau le code ici. Ci-dessous, je montre comment assembler le texte segmenté, la représentation vectorielle et les métadonnées, puis insérer les données dans Milvus.
# 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")
Maintenant que les donnĂ©es sont dans Milvus, nous sommes prĂȘts Ă effectuer une recherche !
Recherche Ă lâaide de filtres de mĂ©tadonnĂ©es de chaĂźne
Disons que nous voulons trouver des films de science-fiction qui prĂ©sentent un futur dystopique avec des robots et qui sont trĂšs bien notĂ©s. Nos donnĂ©es dâexemple contiennent des mĂ©tadonnĂ©es que nous pouvons utiliser pour cette recherche.
Voici un exemple de filtrage de mĂ©tadonnĂ©es utilisant des correspondances de chaĂźne approximatives. Ci-dessous, jâai encapsulĂ© lâAPI de recherche Milvus standard uniquement pour afficher plus facilement les mĂ©tadonnĂ©es aprĂšs chaque recherche.
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)
Ressources et lectures complémentaires
Guide de démarrage rapide de Milvus
Utiliser des champs de tableau | Documentation Milvus
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
Continuer Ă lire

Why and How to Migrate from Self-Hosted Milvus to Zilliz Cloud
A simple, step-by-step guide to migrating from Milvus to Zilliz Cloud. Learn both endpoint and backup methods for a smooth, scalable vector database migration.

Why Not All VectorDBs Are Agent-Ready
Explore why choosing the right vector database is critical for scaling AI agents, and why traditional solutions fall short in production.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



