Milvus
Zilliz
  • Home
  • Blog
  • Correspondência de frases com Slop no Milvus 2.6: Como melhorar a precisão da pesquisa de texto completo ao nível da frase

Correspondência de frases com Slop no Milvus 2.6: Como melhorar a precisão da pesquisa de texto completo ao nível da frase

  • Tutorials
December 29, 2025
Alex Zhang

À medida que os dados não estruturados continuam a explodir e os modelos de IA se tornam cada vez mais inteligentes, a pesquisa vetorial tornou-se a camada de recuperação predefinida para muitos sistemas de IA - pipelines ARG, pesquisa de IA, agentes, motores de recomendação e muito mais. Funciona porque capta o significado: não apenas as palavras que os utilizadores escrevem, mas a intenção por detrás delas.

No entanto, quando estas aplicações entram em produção, as equipas descobrem frequentemente que a compreensão semântica é apenas um dos lados do problema da recuperação. Muitas cargas de trabalho também dependem de regras textuais rigorosas - como a correspondência com a terminologia exata, a preservação da ordem das palavras ou a identificação de frases com significado técnico, legal ou operacional.

O Milvus 2.6 elimina essa divisão ao introduzir a pesquisa de texto completo nativa diretamente no banco de dados vetorial. Com índices simbólicos e posicionais incorporados ao mecanismo principal, o Milvus pode interpretar a intenção semântica de uma consulta enquanto impõe restrições precisas de palavras-chave e frases. O resultado é um pipeline de recuperação unificado no qual o significado e a estrutura se reforçam mutuamente, em vez de viverem em sistemas separados.

O Phrase Match é uma parte fundamental desta capacidade de texto integral. Identifica sequências de termos que aparecem juntos e por ordem - crucial para detetar padrões de registo, assinaturas de erros, nomes de produtos e qualquer texto em que a ordem das palavras defina o significado. Neste post, explicaremos como o Phrase Match funciona no Milvus, como o slop adiciona a flexibilidade necessária para o texto do mundo real e por que esses recursos tornam a pesquisa híbrida de vetor e texto completo não apenas possível, mas prática em um único banco de dados.

O que é o Phrase Match?

A Correspondência de Frases é um tipo de consulta de texto integral no Milvus que se concentra na estrutura - especificamente, se uma sequência de palavras aparece na mesma ordem dentro de um documento. Quando não é permitida qualquer flexibilidade, a consulta comporta-se de forma estrita: os termos têm de aparecer uns ao lado dos outros e em sequência. Assim, uma consulta como "aprendizagem automática de robótica" só corresponde quando essas três palavras aparecem como uma frase contínua.

O desafio é que o texto real raramente se comporta desta forma. A linguagem natural introduz ruído: adjectivos extra são introduzidos, os registos reordenam campos, os nomes de produtos ganham modificadores e os autores humanos não escrevem com os motores de pesquisa em mente. Uma correspondência rigorosa de frases quebra-se facilmente - uma palavra inserida, uma reformulação ou um termo trocado pode causar uma falha. E em muitos sistemas de IA, especialmente os voltados para a produção, não é aceitável perder uma linha de registo relevante ou uma frase que desencadeie uma regra.

O Milvus 2.6 resolve este atrito com um mecanismo simples: slop. A folga define a quantidade de espaço permitido entre os termos da consulta. Em vez de tratar uma frase como frágil e inflexível, o slop permite-lhe decidir se uma palavra extra é tolerável, ou duas, ou mesmo se uma ligeira reordenação deve contar como uma correspondência. Isto faz com que a pesquisa de frases deixe de ser um teste binário de aprovação/reprovação e passe a ser uma ferramenta de recuperação controlada e ajustável.

Para perceber porque é que isto é importante, imagine que procura nos registos todas as variantes do erro de rede familiar "ligação reposta por um par". Na prática, os seus registos podem ter o seguinte aspeto:

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

À primeira vista, todos eles representam o mesmo evento subjacente. Mas os métodos de recuperação comuns têm dificuldades:

O BM25 tem dificuldades com a estrutura.

Ele vê a consulta como um saco de palavras-chave, ignorando a ordem em que elas aparecem. Desde que "connection" e "peer" apareçam algures, o BM25 pode classificar o documento com uma classificação elevada - mesmo que a frase seja invertida ou não esteja relacionada com o conceito que está realmente a procurar.

A pesquisa vetorial tem dificuldade em lidar com restrições.

As incorporações são excelentes na captura de significado e relações semânticas, mas não podem impor uma regra como "estas palavras devem aparecer nesta sequência". Poderá obter mensagens semanticamente relacionadas, mas ainda assim não conseguirá obter o padrão estrutural exato necessário para depuração ou conformidade.

O Phrase Match preenche a lacuna entre estas duas abordagens. Ao utilizar o slop, pode especificar exatamente quanta variação é aceitável:

  • slop = 0 - Correspondência exacta (Todos os termos devem aparecer de forma contígua e por ordem).

  • slop = 1 - Permitir uma palavra extra (Abrange variações comuns da linguagem natural com um único termo inserido).

  • slop = 2 - Permitir várias palavras inseridas (Trata de frases mais descritivas ou verbosas).

  • slop = 3 - Permitir reordenação (suporta frases invertidas ou pouco ordenadas, muitas vezes o caso mais difícil em textos do mundo real).

Em vez de esperar que o algoritmo de pontuação "acerte", declara explicitamente a tolerância estrutural que a sua aplicação exige.

Como funciona a correspondência de frases no Milvus

Com base na biblioteca do motor de busca Tantivy, o Phrase Match em Milvus é implementado em cima de um índice invertido com informação posicional. Em vez de verificar apenas se os termos aparecem num documento, verifica se aparecem na ordem correta e a uma distância controlável.

O diagrama abaixo ilustra o processo:

1. Tokenização de documentos (com posições)

Quando os documentos são inseridos no Milvus, os campos de texto são processados por um analisador, que divide o texto em tokens (palavras ou termos) e regista a posição de cada token no documento. Por exemplo, doc_1 é tokenizado como: machine (pos=0), learning (pos=1), boosts (pos=2), efficiency (pos=3).

2. Criação do Índice Invertido

De seguida, o Milvus constrói um índice invertido. Em vez de mapear os documentos para os seus conteúdos, o índice invertido mapeia cada token para os documentos em que aparece, juntamente com todas as posições registadas desse token dentro de cada documento.

3. Correspondência de frases

Quando uma consulta de frase é executada, o Milvus usa primeiro o índice invertido para identificar documentos que contêm todos os tokens da consulta. Em seguida, valida cada candidato comparando as posições dos tokens para garantir que os termos aparecem na ordem correta e dentro da distância permitida slop. Apenas os documentos que satisfazem ambas as condições são devolvidos como correspondências.

O diagrama abaixo resume como a Correspondência de Frases funciona de ponta a ponta.

Como ativar a Correspondência de Frases no Milvus

O Phrase Match funciona em campos do tipo VARCHARo tipo de string no Milvus. Para o utilizar, é necessário configurar o esquema da coleção de modo a que o Milvus efectue a análise de texto e armazene a informação posicional do campo. Para tal, é necessário ativar dois parâmetros: enable_analyzer e enable_match.

Definir enable_analyzer e enable_match

Para ativar a Phrase Match para um campo VARCHAR específico, defina ambos os parâmetros para True ao definir o esquema do campo. Juntos, eles dizem ao Milvus para:

  • tokenizar o texto (via enable_analyzer), e

  • construir um índice invertido com deslocamentos posicionais (via enable_match).

O Phrase Match baseia-se em ambos os passos: o analisador divide o texto em tokens, e o índice de correspondência armazena onde esses tokens aparecem, permitindo consultas eficientes baseadas em frases e slop.

Abaixo está um exemplo de configuração de esquema que ativa a Correspondência de Frases num campo text:

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 )

Pesquisar com Phrase Match: Como o slop afeta o conjunto de candidatos

Depois de ativar a correspondência para um campo VARCHAR no seu esquema de coleção, pode efetuar correspondências de frases utilizando a expressão PHRASE_MATCH.

Observação: a expressão PHRASE_MATCH não diferencia maiúsculas de minúsculas. Pode utilizar PHRASE_MATCH ou phrase_match.

Nas operações de pesquisa, a Correspondência de Frases é normalmente aplicada antes da classificação de semelhança de vectores. Em primeiro lugar, filtra os documentos com base em restrições textuais explícitas, reduzindo o conjunto de candidatos. Os restantes documentos são depois reordenados com recurso a vectores de incorporação.

O exemplo abaixo mostra como diferentes valores de slop afectam este processo. Ao ajustar o parâmetro slop, controla diretamente os documentos que passam o filtro de frases e prosseguem para a fase de classificação vetorial.

Suponha que tem uma coleção chamada tech_articles que contém as cinco entidades seguintes:

doc_idtexto
1A aprendizagem automática aumenta a eficiência da análise de dados em grande escala
2A aprendizagem de uma abordagem baseada na máquina é vital para o progresso da IA moderna
3As arquitecturas de máquinas de aprendizagem profunda optimizam as cargas computacionais
4A máquina melhora rapidamente o desempenho do modelo para a aprendizagem contínua
5A aprendizagem de algoritmos avançados de máquinas expande as capacidades da IA

slop=1

Aqui, permitimos uma inclinação de 1. O filtro é aplicado a documentos que contêm a frase "máquina de aprendizagem" com uma ligeira flexibilidade.

# 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”] )

Resultados da correspondência:

doc_idtexto
2Aprender uma abordagem baseada em máquinas é vital para o progresso da IA moderna
3As arquitecturas de máquinas de aprendizagem profunda optimizam as cargas computacionais
5A aprendizagem de algoritmos de máquina avançados expande as capacidades da IA

slop=2

Este exemplo permite uma inclinação de 2, o que significa que são permitidos até dois tokens extra (ou termos invertidos) entre as palavras "machine" e "learning".

# 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”] )

Resultados da correspondência:

doc_idtexto
1A aprendizagem automática aumenta a eficiência da análise de dados em grande escala
3As arquitecturas de máquinas de aprendizagem profunda optimizam as cargas computacionais

slop=3

Neste exemplo, uma inclinação de 3 proporciona ainda mais flexibilidade. O filtro procura "machine learning" com um máximo de três posições de token permitidas entre as palavras.

# 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”] )

Resultados da correspondência:

doc_idtexto
1A aprendizagem automática aumenta a eficiência da análise de dados em grande escala
2A aprendizagem de uma abordagem baseada na máquina é vital para o progresso da IA moderna
3As arquitecturas de máquinas de aprendizagem profunda optimizam as cargas computacionais
5A aprendizagem de algoritmos de máquina avançados expande as capacidades da IA

Dicas rápidas: O que precisa de saber antes de ativar a correspondência de frases no Milvus

A Correspondência de Frases fornece suporte para a filtragem ao nível da frase, mas a sua ativação envolve mais do que a configuração em tempo de consulta. É útil estar ciente das considerações associadas antes de aplicá-lo em um ambiente de produção.

  • A ativação do Phrase Match num campo cria um índice invertido, o que aumenta a utilização do armazenamento. O custo exato depende de factores como o comprimento do texto, o número de tokens únicos e a configuração do analisador. Ao trabalhar com campos de texto grandes ou dados de alta cardinalidade, essa sobrecarga deve ser considerada antecipadamente.

  • A configuração do analisador é outra escolha crítica de design. Quando um analisador é definido no esquema de coleção, não pode ser alterado. A mudança para um analisador diferente mais tarde requer a eliminação da coleção existente e a sua recriação com um novo esquema. Por este motivo, a seleção do analisador deve ser tratada como uma decisão a longo prazo e não como uma experiência.

  • O comportamento do Phrase Match está intimamente ligado à forma como o texto é tokenizado. Antes de aplicar um analisador a uma coleção inteira, recomenda-se a utilização do método run_analyzer para inspecionar o resultado da tokenização e confirmar que corresponde às suas expectativas. Esta etapa pode ajudar a evitar incompatibilidades subtis e resultados de consulta inesperados mais tarde. Para obter mais informações, consulte Visão geral do analisador.

Conclusão

A Correspondência de Frases é um tipo de pesquisa de texto integral central que permite restrições posicionais e ao nível da frase para além da simples correspondência de palavras-chave. Ao operar na ordem e proximidade dos tokens, fornece uma forma previsível e precisa de filtrar documentos com base na forma como os termos aparecem efetivamente no texto.

Nos sistemas de recuperação modernos, o Phrase Match é normalmente aplicado antes da classificação baseada em vectores. Em primeiro lugar, restringe o conjunto de candidatos aos documentos que satisfazem explicitamente as frases ou estruturas requeridas. A pesquisa vetorial é então utilizada para classificar estes resultados por relevância semântica. Este padrão é especialmente eficaz em cenários como a análise de registos, a pesquisa de documentação técnica e os pipelines RAG, onde as restrições textuais têm de ser aplicadas antes de se considerar a semelhança semântica.

Com a introdução do parâmetro slop no Milvus 2.6, o Phrase Match torna-se mais tolerante à variação da linguagem natural, mantendo o seu papel como um mecanismo de filtragem de texto completo. Isto torna as restrições ao nível da frase mais fáceis de aplicar em fluxos de trabalho de recuperação de produção.

Experimente com os scripts de demonstração e explore o Milvus 2.6 para ver como a recuperação com reconhecimento de frase se encaixa na sua pilha.

Tem dúvidas ou quer um mergulho profundo em qualquer recurso do Milvus mais recente? Junte-se ao nosso canal Discord ou registre problemas no GitHub. Também pode reservar uma sessão individual de 20 minutos para obter informações, orientação e respostas às suas perguntas através do Milvus Office Hours.

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Continue Lendo