Concordancia de frases con Slop en Milvus 2.6: Cómo mejorar la precisión de la búsqueda de texto completo a nivel de frase
A medida que los datos no estructurados siguen explotando y los modelos de IA se hacen cada vez más inteligentes, la búsqueda vectorial se ha convertido en la capa de recuperación por defecto de muchos sistemas de IA: canalizaciones RAG, búsqueda de IA, agentes, motores de recomendación, etcétera. Funciona porque capta el significado: no sólo las palabras que escriben los usuarios, sino la intención que hay detrás de ellas.
Sin embargo, una vez que estas aplicaciones entran en producción, los equipos suelen descubrir que la comprensión semántica es sólo una parte del problema de la recuperación. Muchas cargas de trabajo también dependen de reglas textuales estrictas, como la coincidencia de terminología exacta, la conservación del orden de las palabras o la identificación de frases con significado técnico, legal u operativo.
Milvus 2.6 elimina esa división introduciendo la búsqueda nativa de texto completo directamente en la base de datos vectorial. Gracias a los índices posicionales y de tokens integrados en el motor central, Milvus puede interpretar la intención semántica de una consulta al tiempo que aplica restricciones precisas a nivel de palabras clave y frases. El resultado es un proceso de recuperación unificado en el que el significado y la estructura se refuerzan mutuamente en lugar de vivir en sistemas separados.
La concordancia de frases es un elemento clave de esta capacidad de texto completo. Identifica secuencias de términos que aparecen juntos y en orden, algo crucial para detectar patrones de registro, firmas de error, nombres de productos y cualquier texto en el que el orden de las palabras defina el significado. En este artículo, explicaremos cómo funciona Phrase Match en Milvus, cómo slop añade la flexibilidad necesaria para el texto del mundo real y por qué estas características hacen que la búsqueda híbrida de vector-texto completo no sólo sea posible sino práctica dentro de una única base de datos.
¿Qué es Phrase Match?
La concordancia de frases es un tipo de consulta de texto completo en Milvus que se centra en la estructura -específicamente, si una secuencia de palabras aparece en el mismo orden dentro de un documento. Cuando no se permite ninguna flexibilidad, la consulta se comporta de forma estricta: los términos deben aparecer uno al lado del otro y en secuencia. Por tanto, una consulta como "robótica aprendizaje automático" sólo coincide cuando esas tres palabras aparecen como una frase continua.
El problema es que el texto real rara vez se comporta de esta manera. El lenguaje natural introduce ruido: se cuelan adjetivos adicionales, los registros reordenan los campos, los nombres de los productos ganan modificadores y los autores humanos no escriben pensando en los motores de consulta. Una concordancia de frase estricta se rompe con facilidad: una palabra insertada, una reformulación o un término intercambiado pueden provocar un fallo. Y en muchos sistemas de inteligencia artificial, especialmente en los de producción, no es aceptable omitir una línea de registro relevante o una frase que desencadene una regla.
Milvus 2.6 aborda esta fricción con un mecanismo sencillo: el margen de error. La holgura define el margen de maniobra permitido entre los términos de la consulta. En lugar de tratar una frase como frágil e inflexible, el margen de maniobra le permite decidir si una palabra extra es tolerable, o dos, o incluso si una ligera reordenación debe seguir contando como coincidencia. De este modo, la búsqueda de frases deja de ser una prueba binaria de aprobado-desaprobado para convertirse en una herramienta de recuperación controlada y ajustable.
Para ver por qué esto es importante, imagine que busca en los registros todas las variantes del conocido error de red "conexión restablecida por el par". En la práctica, sus registros podrían tener este aspecto:
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
A primera vista, todos ellos representan el mismo evento subyacente. Pero los métodos comunes de recuperación tienen dificultades:
BM25 tiene problemas con la estructura.
Considera la consulta como un conjunto de palabras clave, ignorando el orden en que aparecen. Siempre que "conexión" y "homólogo" aparezcan en algún lugar, BM25 puede clasificar el documento en un puesto alto, incluso si la frase es inversa o no está relacionada con el concepto que se está buscando.
La búsqueda vectorial tiene dificultades con las restricciones.
Las incrustaciones son excelentes para captar el significado y las relaciones semánticas, pero no pueden imponer una regla del tipo "estas palabras deben aparecer en esta secuencia". Es posible que recupere mensajes relacionados semánticamente, pero siga sin encontrar el patrón estructural exacto necesario para la depuración o el cumplimiento de normas.
La concordancia de frases llena el vacío existente entre estos dos enfoques. Mediante el uso de slop, puede especificar exactamente cuánta variación es aceptable:
slop = 0- Coincidencia exacta (Todos los términos deben aparecer contiguos y en orden.)slop = 1- Permitir una palabra extra (Cubre variaciones comunes del lenguaje natural con un solo término insertado).slop = 2- Permitir varias palabras insertadas (permite expresiones más descriptivas o verbales).slop = 3- Permitir reordenación (admite frases invertidas o poco ordenadas, a menudo el caso más difícil en el texto del mundo real).
En lugar de esperar que el algoritmo de puntuación "acierte", usted declara explícitamente la tolerancia estructural que requiere su aplicación.
Cómo funciona la concordancia de frases en Milvus
Desarrollado por la biblioteca del motor de búsqueda Tantivy, Phrase Match en Milvus se implementa sobre un índice invertido con información posicional. En lugar de comprobar únicamente si los términos aparecen en un documento, verifica que aparezcan en el orden correcto y dentro de una distancia controlable.
El diagrama siguiente ilustra el proceso:
1. Tokenización de documentos (con posiciones)
Cuando se insertan documentos en Milvus, los campos de texto son procesados por un analizador, que divide el texto en tokens (palabras o términos) y registra la posición de cada token dentro del documento. Por ejemplo, doc_1 se divide en tokens como: machine (pos=0), learning (pos=1), boosts (pos=2), efficiency (pos=3).
2. Creación de índices invertidos
A continuación, Milvus crea un índice invertido. En lugar de asignar los documentos a su contenido, el índice invertido asigna cada token a los documentos en los que aparece, junto con todas las posiciones registradas de ese token dentro de cada documento.
3. Comparación de frases
Cuando se ejecuta una consulta de frase, Milvus utiliza primero el índice invertido para identificar los documentos que contienen todos los tokens de la consulta. A continuación, valida cada candidato comparando las posiciones de los tokens para asegurarse de que los términos aparecen en el orden correcto y dentro de la distancia permitida slop. Sólo los documentos que cumplen ambas condiciones se consideran coincidentes.
El siguiente diagrama resume el funcionamiento de Phrase Match de principio a fin.
Cómo activar la concordancia de frases en Milvus
La concordancia de frases funciona en campos de tipo VARCHARel tipo de cadena en Milvus. Para utilizarlo, debe configurar el esquema de su colección para que Milvus realice el análisis de texto y almacene la información posicional del campo. Esto se hace habilitando dos parámetros: enable_analyzer y enable_match.
Configurar enable_analyzer y enable_match
Para activar Phrase Match para un campo VARCHAR específico, establezca ambos parámetros en True cuando defina el esquema del campo. Juntos, le dicen a Milvus que
tokenice el texto (a través de
enable_analyzer), yconstruya un índice invertido con desplazamientos posicionales (a través de
enable_match).
La concordancia de frases se basa en ambos pasos: el analizador divide el texto en tokens y el índice de concordancia almacena dónde aparecen esos tokens, lo que permite realizar consultas eficientes basadas en frases y slop.
A continuación se muestra un ejemplo de configuración de esquema que activa la concordancia de frases en un 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
)
Búsqueda con concordancia de frases: Cómo afecta el Slop al conjunto de candidatos
Una vez habilitada la coincidencia para un campo VARCHAR en el esquema de su colección, puede realizar coincidencias de frases utilizando la expresión PHRASE_MATCH.
Nota: La expresión PHRASE_MATCH no distingue entre mayúsculas y minúsculas. Puede utilizar PHRASE_MATCH o phrase_match.
En las operaciones de búsqueda, la concordancia de frase suele aplicarse antes de la clasificación por similitud vectorial. Primero filtra los documentos basándose en restricciones textuales explícitas, reduciendo el conjunto de candidatos. A continuación, los documentos restantes se vuelven a clasificar utilizando incrustaciones vectoriales.
El ejemplo siguiente muestra cómo afectan a este proceso los distintos valores de slop. Al ajustar el parámetro slop, se controla directamente qué documentos superan el filtro de frases y pasan a la fase de clasificación vectorial.
Supongamos que tiene una colección denominada tech_articles que contiene las cinco entidades siguientes:
| doc_id | texto |
|---|---|
| 1 | El aprendizaje automático aumenta la eficacia del análisis de datos a gran escala |
| 2 | El aprendizaje automático es vital para el progreso de la IA moderna |
| 3 | Las arquitecturas de máquinas de aprendizaje profundo optimizan las cargas computacionales |
| 4 | La máquina mejora rápidamente el rendimiento del modelo para el aprendizaje continuo |
| 5 | El aprendizaje de algoritmos de máquina avanzados amplía las capacidades de la IA |
slop=1
Aquí, permitimos una inclinación de 1. El filtro se aplica a los documentos que contienen la frase "máquina de aprendizaje" con una ligera flexibilidad.
# 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 de la búsqueda:
| doc_id | texto |
|---|---|
| 2 | El aprendizaje de una máquina es vital para el progreso de la IA moderna |
| 3 | Las arquitecturas de las máquinas de aprendizaje profundo optimizan las cargas computacionales |
| 5 | El aprendizaje de algoritmos de máquina avanzados amplía las capacidades de la IA |
slop=2
Este ejemplo permite un slop de 2, lo que significa que se permiten hasta dos tokens adicionales (o términos invertidos) entre las palabras "máquina" y "aprendizaje".
# 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”]
)
Resultado de la búsqueda:
| doc_id | texto |
|---|---|
| 1 | El aprendizaje automático aumenta la eficacia del análisis de datos a gran escala |
| 3 | Las arquitecturas de máquinas de aprendizaje profundo optimizan las cargas computacionales |
slop=3
En este ejemplo, un slop de 3 proporciona aún más flexibilidad. El filtro busca "aprendizaje automático" con un máximo de tres posiciones de token permitidas entre las palabras.
# 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”]
)
Resultado de la búsqueda:
| doc_id | texto |
|---|---|
| 1 | El aprendizaje automático aumenta la eficacia del análisis de datos a gran escala |
| 2 | El aprendizaje automático es vital para el progreso de la IA moderna |
| 3 | Las arquitecturas de máquinas de aprendizaje profundo optimizan las cargas computacionales |
| 5 | El aprendizaje de algoritmos de máquina avanzados amplía las capacidades de la IA |
Consejos rápidos: Lo que necesita saber antes de habilitar Phrase Match en Milvus
Phrase Match proporciona soporte para el filtrado a nivel de frase, pero activarlo implica más que la configuración en tiempo de consulta. Es útil conocer las consideraciones asociadas antes de aplicarlo en un entorno de producción.
Al activar Phrase Match en un campo se crea un índice invertido, lo que aumenta el uso de almacenamiento. El coste exacto depende de factores como la longitud del texto, el número de tokens únicos y la configuración del analizador. Cuando se trabaja con campos de texto de gran tamaño o con datos de alta cardinalidad, esta sobrecarga debe tenerse en cuenta de antemano.
La configuración del analizador es otra opción de diseño fundamental. Una vez que se define un analizador en el esquema de recopilación, no se puede cambiar. Cambiar a un analizador diferente más adelante requiere eliminar la colección existente y volver a crearla con un nuevo esquema. Por este motivo, la selección del analizador debe tratarse como una decisión a largo plazo y no como un experimento.
El comportamiento de la concordancia de frases está estrechamente relacionado con la tokenización del texto. Antes de aplicar un analizador a toda una colección, se recomienda utilizar el método
run_analyzerpara inspeccionar el resultado de la tokenización y confirmar que coincide con sus expectativas. Este paso puede ayudar a evitar desajustes sutiles y resultados de consulta inesperados más adelante. Para obtener más información, consulte Descripción general del analizador.
Conclusión
La concordancia de frases es un tipo de búsqueda de texto completo básico que permite restricciones a nivel de frase y de posición más allá de la simple concordancia de palabras clave. Al operar en el orden y la proximidad de los tokens, proporciona una forma predecible y precisa de filtrar documentos basándose en cómo aparecen realmente los términos en el texto.
En los sistemas de recuperación modernos, la concordancia de frases suele aplicarse antes de la clasificación basada en vectores. En primer lugar, restringe el conjunto de candidatos a los documentos que satisfacen explícitamente las frases o estructuras requeridas. A continuación, se utiliza la búsqueda vectorial para clasificar estos resultados por relevancia semántica. Este patrón es especialmente eficaz en situaciones como el análisis de registros, la búsqueda de documentación técnica y las canalizaciones RAG, en las que deben aplicarse restricciones textuales antes de tener en cuenta la similitud semántica.
Con la introducción del parámetro slop en Milvus 2.6, Phrase Match se vuelve más tolerante a la variación del lenguaje natural, al tiempo que conserva su papel como mecanismo de filtrado de texto completo. Esto hace que las restricciones a nivel de frase sean más fáciles de aplicar en los flujos de trabajo de recuperación de producción.
👉 Pruébelo con los scripts de demostración y explore Milvus 2.6 para ver cómo la recuperación consciente de las frases encaja en su pila.
Tienes preguntas o quieres una inmersión profunda en cualquier característica del último Milvus? Únase a nuestro canal Discord o presente incidencias en GitHub. También puede reservar una sesión individual de 20 minutos para obtener información, orientación y respuestas a sus preguntas a través de Milvus Office Hours.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



