🚀 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

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.

AI Agents Are Quietly Transforming E-Commerce — Here’s How
Discover how AI agents transform e-commerce with autonomous decision-making, enhanced product discovery, and vector search capabilities for today's retailers.



