🚀 Novidades na filtragem de metadados no Milvus v2.4.3
Milvus v2.4.3 introduziu a correspondência de metadados de string completa! 🎉 Agora, você pode corresponder strings usando buscas por prefixo, infixo, sufixo ou até mesmo curinga de caractere.
# Exemplo de prefixo, corresponde a qualquer string que comece com “The”.
expression='title like "The%"'
# Exemplo de infixo, corresponde a qualquer string com a palavra “the” em qualquer lugar da frase.
expression='title like "%the%"'
# Exemplo de sufixo, corresponde a qualquer string que termine com “Rye”.
expression='title like "%Rye"'
# Exemplo de curinga de caractere único, corresponde a qualquer caractere único em uma posição específica.
expression='title like "Flip_ed"'
Em blogs anteriores, falamos apenas sobre correspondência de strings por prefixo. No entanto, desde o Milvus v2.4.3, todas as variações também são possíveis, assim como o uso de valores de array, seja por correspondências exatas ou verificando se algum elemento no array corresponde (contains_any()). 🗂️🔍
Essas atualizações tornam a filtragem de metadados mais versátil e poderosa!
Vamos tornar tudo isso mais claro com um exemplo. Usarei dados de filmes do IMDB para este blog, que baixei do Kaggle.
# Importe bibliotecas comuns.
import sys, os, time, pprint
import pandas as pd
# Leia os dados CSV.
df = pd.read_csv("data/original_data.csv")
# Reduza os dados para a demonstração.
df = df.tail(200)
display(df.head())
Cada filme tem um campo ‘text’ com sua descrição e avaliações. 📝
Cada filme inclui metadados como o ano de lançamento, classificação e listas de gêneros, atores e palavras-chave. 🎬⭐️📅
Cada “linha” representa um trecho de texto de avaliação de filme, sua representação vetorial e metadados como movie_id, título do filme, link do pôster, gêneros e atores.
Seguindo o padrão usual de RAG: 📝🎬
Conectar ao Milvus: Primeiro, conecte-se ao Milvus Lite, a implantação local do Milvus. Este é o nosso banco de dados para armazenar e gerenciar vetores. 🖥️🔗
Transformar Texto de Filme em Vetores: Pegue o campo de texto de cada filme, que inclui a descrição e a avaliação, e transforme-o em um vetor. Usaremos o modelo HuggingFace BAAI/bge-large-en-v1.5 para isso. 🧠➡️📏
📥📊 Inserir Vetores e Metadados no Milvus: Insira esse vetor, junto com o texto original (chamado de “chunk”) e seus metadados (como ano, classificação, gêneros etc.) no Milvus. 📥📊
Lidar com Consultas de Usuários: Transforme a consulta do usuário em um vetor usando o mesmo modelo de embedding. Em seguida, execute uma busca de Vizinhos Mais Próximos Aproximados para encontrar os vetores de dados mais próximos do vetor da consulta. 🔍🎬
Você pode encontrar o código completo no meu GitHub.
Primeiro, conecte-se ao Milvus. Você precisará instalar o Pymilvus com pip. (Ao especificar apenas um nome de arquivo local, ele usa o Milvus Lite, um banco de dados vetorial local. Se você tiver outro Milvus, como docker ou K8s implantado ou o Zilliz Cloud totalmente gerenciado, pode especificar o URI e o Token para se conectar a eles. O restante do código funciona da mesma forma.)
# !python -m pip install -U pymilvus
import pymilvus
# Conecte um cliente ao servidor Milvus Lite.
from pymilvus import MilvusClient
client = MilvusClient("milvus_demo.db")
Em seguida, divida em chunks e incorpore a coluna de texto que contém a avaliação do filme em vetores. Muitos recursos dão exemplos de como fazer isso, então não mostrarei o código novamente aqui. Abaixo, mostro como montar o texto dividido em chunks, a representação vetorial e os metadados, e inserir os dados no 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")
Agora que os dados estão no Milvus, estamos prontos para pesquisar!
Pesquisa Usando Filtros de Metadados de String
Digamos que queremos encontrar filmes de ficção científica que tenham um futuro distópico com robôs e sejam bem avaliados. Nossos dados de exemplo têm metadados que podemos usar para esta pesquisa.
Aqui está um exemplo de filtragem de metadados usando correspondências de string fuzzy. Abaixo, envolvi a API de pesquisa vanilla do Milvus apenas para exibir metadados mais facilmente após cada pesquisa.
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)
Recursos e Leituras Adicionais
Guia de Início Rápido do Milvus
Use Campos de Array | Documentação do 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
Continue lendo

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.

A Developer's Guide to Exploring Milvus 2.6 Features on Zilliz Cloud
Milvus 2.6 marks a shift from “vector search + glue code” to a more advanced retrieval engine, and it is now Generally Available (GA) on Zilliz Cloud (a managed Milvus service).

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.



