Elija el analizador adecuado para su caso de uso

Esta guía se centra en la toma de decisiones prácticas para la selección del analizador. Para obtener detalles técnicos sobre los componentes del analizador y sobre cómo añadir parámetros del analizador, consulte Descripción general del analizador.

Comprender los analizadores en 2 minutos

En Milvus, un analizador procesa el texto almacenado en este campo para hacerlo consultable para funciones como la búsqueda de texto completo (BM25), la concordancia de frase o la concordancia de texto. Piense en él como un procesador de texto que transforma su contenido sin procesar en tokens buscables.

Un analizador funciona en un proceso simple de dos etapas:

Analyzer Workflow Flujo de trabajo del analizador

  1. Tokenización (obligatoria): Esta etapa inicial aplica un tokenizador para dividir una cadena continua de texto en unidades discretas y significativas llamadas tokens. El método de tokenización puede variar significativamente según el idioma y el tipo de contenido.

  2. Filtrado de tokens (opcional): Tras la tokenización, se aplican filtros para modificar, eliminar o refinar los tokens. Estas operaciones pueden incluir la conversión de todos los tokens a minúsculas, la eliminación de palabras comunes sin sentido (como stopwords) o la reducción de palabras a su forma raíz (stemming).

Ejemplo:

Input: "Hello World!" 
       1. Tokenization → ["Hello", "World", "!"]
       2. Lowercase & Punctuation Filtering → ["hello", "world"]

Por qué es importante la elección del analizador

La elección de un analizador incorrecto puede hacer que no se puedan buscar documentos relevantes o que se obtengan resultados irrelevantes.

En la tabla siguiente se resumen los problemas más comunes causados por una selección incorrecta del analizador y se ofrecen soluciones prácticas para diagnosticar los problemas de búsqueda.

Problema

Síntoma

Ejemplo (entrada y salida)

Causa (mal analizador)

Solución (buen analizador)

Sobre-tokenización

Las consultas de texto para términos técnicos, identificadores o URL no encuentran documentos relevantes.

  • "user_id"['user', 'id']

  • "C++"['c']

standard analizador

Utilice un whitespace tokenizer; combínelo con un alphanumonly filtro.

Subtokenización

La búsqueda de un componente de una frase de varias palabras no devuelve documentos que contengan la frase completa.

"state-of-the-art"['state-of-the-art']

Analizador con un whitespace tokenizador

Utilice un standard tokenizer para dividir en puntuación y espacios; utilice un filtro regex personalizado.

Desajustes de idioma

Los resultados de la búsqueda para un idioma específico no tienen sentido o no existen.

Texto chino: "机器学习"['机器学习'] (un token)

english analizador

Utilice un analizador específico del idioma, como chinese.

Primera pregunta: ¿Es necesario elegir un analizador?

En muchos casos no es necesario hacer nada especial. Determinemos si eres uno de ellos.

Comportamiento por defecto: standard analyzer

Si no especifica un analizador al utilizar funciones de recuperación de texto como la búsqueda de texto completo, Milvus utiliza automáticamente el analizador standard analizador.

El analizador standard:

  • Divide el texto en espacios y signos de puntuación

  • Convierte todos los tokens a minúsculas

  • Elimina un conjunto integrado de palabras de parada comunes en inglés y la mayoría de los signos de puntuación.

Ejemplo de transformación:

Input:  "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

Criterios de decisión: Comprobación rápida

Utilice esta tabla para determinar rápidamente si el analizador por defecto de standard satisface sus necesidades. Si no lo hace, tendrá que elegir un camino diferente.

Su contenido

¿Está bien el analizador estándar?

Por qué

Qué necesita

Entradas de blog en inglés

✅ Sí

El comportamiento por defecto es suficiente.

Use el predeterminado (no necesita configuración).

Documentos en chino

❌ No

Las palabras chinas no tienen espacios y se tratarán como un solo token.

Utilice un chinese integrado.

Documentación técnica

❌ No

Se eliminan los signos de puntuación de términos como C++.

Cree un analizador personalizado con un whitespace tokenizador y un alphanumonly filtro.

Lenguas separadas por espacios como el texto francés/español

⚠️ Tal vez

Los caracteres acentuados (café vs. cafe) pueden no coincidir.

Se recomienda utilizar un analizador personalizado con el asciifolding para obtener mejores resultados.

Idiomas multilingües o desconocidos

❌ No

El analizador standard carece de la lógica específica del idioma necesaria para manejar diferentes conjuntos de caracteres y reglas de tokenización.

Utilice un analizador personalizado con el icu para la tokenización unicode.

Como alternativa, considere la posibilidad de configurar analizadores multilingües o un identificador de idioma para una gestión más precisa del contenido multilingüe.

Si el analizador predeterminado de standard no puede satisfacer sus necesidades, deberá implementar uno diferente. Tiene dos opciones:

Ruta A: Utilizar analizadores integrados

Los analizadores integrados son soluciones preconfiguradas para los lenguajes más comunes. Son la forma más sencilla de empezar cuando el analizador estándar predeterminado no se adapta perfectamente.

Analizadores integrados disponibles

Analizador

Soporte de idiomas

Componentes

Notas

standard

La mayoría de los idiomas separados por espacios (inglés, francés, alemán, español, etc.)

  • Tokenizador: standard

  • Filtros: lowercase

Analizador de uso general para el tratamiento inicial del texto. Para situaciones monolingües, los analizadores específicos por idioma (como english) ofrecen un mejor rendimiento.

english

Dedicado al inglés, que aplica stemming y eliminación de palabras vacías para una mejor correspondencia semántica en inglés.

  • Tokenizador: standard

  • Filtros: lowercase stemmer , stop

Recomendado para contenidos exclusivamente en inglés por encima de standard.

chinese

Chino

  • Tokenizer: jieba

  • Filtros: cnalphanumonly

Actualmente utiliza el diccionario de chino simplificado por defecto.

Ejemplo de implementación

Para utilizar un analizador incorporado, basta con especificar su tipo en analyzer_params al definir el esquema de campos.

# Using built-in English analyzer
analyzer_params = {
    "type": "english"
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

Para obtener información detallada sobre su uso, consulte Búsqueda de texto completo, Coincidencia de texto o Coincidencia de frase.

Ruta B: Crear un analizador personalizado

Cuando las opciones incorporadas no satisfacen sus necesidades, puede crear un analizador personalizado combinando un tokenizador con un conjunto de filtros. De este modo, tendrá un control total sobre el procesamiento del texto.

Paso 1: Seleccionar el tokenizador en función del idioma

Elija el tokenizador en función del idioma principal de su contenido:

Lenguas occidentales

Para las lenguas separadas por espacios, tiene estas opciones:

Tokenizer

Cómo funciona

Lo mejor para

Ejemplos

standard

Divide el texto en función de los espacios y los signos de puntuación

Texto general, puntuación mixta

  • Entrada "Hello, world! Visit example.com"

  • Salida: ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

Divide el texto sólo en función de los espacios en blanco

Contenido preprocesado, texto formateado por el usuario

  • Entrada: "user_id = get_user_data()"

  • Salida: ['user_id', '=', 'get_user_data()']

Lenguas de Asia oriental

Las lenguas basadas en diccionarios requieren tokenizadores especializados para una segmentación adecuada de las palabras:

Chino

Tokenizador

Cómo funciona

Lo mejor para

Ejemplos

jieba

Segmentación basada en diccionario chino con algoritmo inteligente

Recomendado para contenidos en chino - combina diccionario con algoritmos inteligentes, diseñados específicamente para el chino

  • Entrada: "机器学习是人工智能的一个分支"

  • Salida: ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

Análisis morfológico puro basado en diccionario con diccionario chino(cc-cedict)

En comparación con jieba, procesa el texto chino de forma más genérica

  • Entrada: "机器学习算法"

  • Salida: ["机器", "学习", "算法"]

Japonés y coreano

Idioma

Tokenizador

Opciones de diccionario

Mejor para

Ejemplos

Japonés

lindera

ipádico (de uso general), ipádico-neológico (términos modernos), unídico (académico)

Análisis morfológico con tratamiento de nombres propios

  • Entrada "東京都渋谷区"

  • Salida: ["東京", "都", "渋谷", "区"]

Coreano

lindera

ko-dic

Análisis morfológico del coreano

  • Entrada: "안녕하세요"

  • Salida: ["안녕", "하", "세요"]

Lenguas multilingües o desconocidas

Para contenidos en los que los idiomas son impredecibles o están mezclados dentro de los documentos:

Tokenizer

Cómo funciona

Lo mejor para

Ejemplos

icu

Tokenización compatible con Unicode (International Components for Unicode)

Escrituras mixtas, idiomas desconocidos o cuando basta con una simple tokenización.

  • Entrada: "Hello 世界 مرحبا"

  • Salida: ['Hello', ' ', '世界', ' ', 'مرحبا']

Cuándo utilizar icu:

  • Lenguajes mixtos en los que la identificación del idioma no es práctica.

  • No se desea la sobrecarga de los analizadores multilingües o del identificador de idioma.

  • El contenido tiene una lengua principal con palabras extranjeras ocasionales que contribuyen poco al significado global (por ejemplo, texto en inglés con nombres de marcas o términos técnicos esporádicos en japonés o francés).

Enfoques alternativos: Para un tratamiento más preciso del contenido multilingüe, considere la posibilidad de utilizar analizadores multilingües o el identificador de idioma. Para más información, consulte Analizadores multilingües o Identificador de lengua.

Paso 2: Añadir filtros para mayor precisión

Una vez seleccionado el tokenizador, aplique filtros en función de sus requisitos de búsqueda específicos y de las características del contenido.

Filtros de uso común

Estos filtros son esenciales para la mayoría de las configuraciones de idiomas separados por espacios (inglés, francés, alemán, español, etc.) y mejoran significativamente la calidad de la búsqueda:

Filtro

Cómo funciona

Cuándo utilizarlo

Ejemplos

lowercase

Convertir todos los tokens a minúsculas

Universal - se aplica a todos los idiomas con distinción entre mayúsculas y minúsculas

  • Entrada ["Apple", "iPhone"]

  • Salida: [['apple'], ['iphone']]

stemmer

Reducir las palabras a su forma raíz

Lenguas con inflexiones de palabras (inglés, francés, alemán, etc.)

Para el inglés:

  • Entrada: ["running", "runs", "ran"]

  • Salida: [['run'], ['run'], ['ran']]

stop

Eliminar palabras comunes sin sentido

Para la mayoría de las lenguas - especialmente eficaz para las lenguas separadas por espacios

  • Entrada: ["the", "quick", "brown", "fox"]

  • Salida: [[], ['quick'], ['brown'], ['fox']]

Para las lenguas de Asia Oriental (chino, japonés, coreano, etc.), utilice filtros específicos para cada lengua. Estas lenguas suelen utilizar métodos distintos para procesar el texto y puede que no se beneficien significativamente de la normalización.

Filtros de normalización de texto

Estos filtros normalizan las variaciones de texto para mejorar la coherencia de las coincidencias:

Filtro

Cómo funciona

Cuándo utilizarlo

Ejemplos

asciifolding

Convertir caracteres acentuados en equivalentes ASCII

Contenido internacional, contenido generado por el usuario

  • Entrada: ["café", "naïve", "résumé"]

  • Salida: [['cafe'], ['naive'], ['resume']]

Filtrado de símbolos

Controle qué tokens se conservan en función del contenido o la longitud de los caracteres:

Filtro

Cómo funciona

Cuándo utilizarlo

Ejemplos

removepunct

Eliminar signos de puntuación independientes

Limpia los resultados de los tokenizadores jieba, lindera, icu, que devuelven los signos de puntuación como tokens individuales.

  • Entrada: ["Hello", "!", "world"]

  • Salida: [['Hello'], ['world']]

alphanumonly

Mantener sólo letras y números

Contenido técnico, procesamiento de texto limpio

  • Entrada: ["user123", "test@email.com"]

  • Salida: [['user123'], ['test', 'email', 'com']]

length

Elimina los tokens fuera del rango de longitud especificado

Filtrar el ruido (tokens excesivamente largos)

  • Entrada: ["a", "very", "extraordinarily"]

  • Salida: [['a'], ['very'], []] (si max=10)

regex

Filtrado personalizado basado en patrones

Requisitos de token específicos del dominio

  • Entrada: ["test123", "prod456"]

  • Salida: [[], ['prod456']] (si expr="^prod")

Filtros específicos de idioma

Estos filtros gestionan características específicas del idioma:

Filtro

Idioma

Funcionamiento

Ejemplos

decompounder

Alemán

Divide palabras compuestas en componentes buscables

  • Entrada ["dampfschifffahrt"]

  • Salida: [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

Chino

Mantiene caracteres chinos + alfanuméricos

  • Entrada: ["Hello", "世界", "123", "!@#"]

  • Salida: [['Hello'], ['世界'], ['123'], []]

cncharonly

Chino

Mantiene sólo caracteres chinos

  • Entrada: ["Hello", "世界", "123"]

  • Salida: [[], ['世界'], []]

Paso 3: Combinar e implementar

Para crear su analizador personalizado, defina el tokenizador y una lista de filtros en el diccionario analyzer_params. Los filtros se aplican en el orden en que aparecen en la lista.

# Example: A custom analyzer for technical content
analyzer_params = {
    "tokenizer": "whitespace",
    "filter": ["lowercase", "alphanumonly"]
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

Final: Pruebe con run_analyzer

Valide siempre su configuración antes de aplicarla a una colección:

# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"

# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

Problemas comunes a comprobar:

  • Exceso de símbolos: Términos técnicos divididos incorrectamente.

  • Infra-tokenización: Frases mal separadas

  • Ausencia de tokens: Filtrado de términos importantes

Para más información, consulte run_analyzer.

Esta sección proporciona configuraciones recomendadas de tokenizadores y filtros para casos de uso comunes cuando se trabaja con analizadores en Milvus. Elija la combinación que mejor se adapte a su tipo de contenido y a sus requisitos de búsqueda.

Antes de aplicar un analizador a su colección, le recomendamos que utilice run_analyzer para probar y validar el rendimiento del análisis de texto.

Idiomas con tildes (francés, español, alemán, etc.)

Utilice un tokenizador standard con conversión a minúsculas, stemming específico del idioma y eliminación de stopwords. Esta configuración también funciona para otros idiomas europeos modificando los parámetros language y stop_words.

# French example
analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase", 
        "asciifolding",  # Handle accent marks
        {
            "type": "stemmer",
            "language": "french"
        },
        {
            "type": "stop",
            "stop_words": ["_french_"]
        }
    ]
}

# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly

Contenido en inglés

Para el tratamiento de textos en inglés con filtrado exhaustivo. También puede utilizar el analizador english integrado:

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase",
        {
            "type": "stemmer",
            "language": "english"
        },
        {
            "type": "stop",
            "stop_words": ["_english_"]
        }
    ]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "english"
}

Contenido en chino

Utilice el tokenizador jieba y aplique un filtro de caracteres para conservar sólo los caracteres chinos, las letras latinas y los dígitos.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["cnalphanumonly"]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "chinese"
}

Para el chino simplificado, cnalphanumonly elimina todos los tokens excepto los caracteres chinos, el texto alfanumérico y los dígitos. Esto evita que la puntuación afecte a la calidad de la búsqueda.

Contenido en japonés

Utilice el tokenizador lindera con el diccionario japonés y los filtros para limpiar la puntuación y controlar la longitud de los tokens:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ipadic"  # Options: ipadic, ipadic-neologd, unidic
    },
    "filter": [
        "removepunct",  # Remove standalone punctuation
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

Contenido en coreano

De forma similar al japonés, utilice el tokenizador lindera con el diccionario coreano:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ko-dic"
    },
    "filter": [
        "removepunct",
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

Contenido mixto o multilingüe

Cuando trabaje con contenidos que abarquen varios idiomas o utilicen guiones de forma impredecible, comience con el analizador icu. Este analizador compatible con Unicode gestiona de forma eficaz la mezcla de guiones y símbolos.

Configuración multilingüe básica (sin stemming):

analyzer_params = {
    "tokenizer": "icu",
    "filter": ["lowercase", "asciifolding"]
}

Procesamiento multilingüe avanzado:

Para controlar mejor el comportamiento de los tokens en distintos idiomas:

Integración con funciones de recuperación de texto

Después de seleccionar su analizador, puede integrarlo con las funciones de recuperación de texto proporcionadas por Milvus.

  • Búsqueda de texto completo

    Los analizadores influyen directamente en la búsqueda de texto completo basada en BM25 mediante la generación de vectores dispersos. Utilice el mismo analizador para la indexación y la consulta con el fin de garantizar una tokenización coherente. Los analizadores específicos de un idioma suelen proporcionar una mejor puntuación BM25 que los genéricos. Para más información, consulte la sección Búsqueda de texto completo.

  • Coincidencia de texto

    Las operaciones de concordancia de texto realizan una concordancia exacta de tokens entre las consultas y el contenido indexado basándose en los resultados del analizador. Para más información, consulte la sección Coincidencia de texto.

  • Coincidencia de frases

    La concordancia de frases requiere una tokenización coherente en expresiones de varias palabras para mantener los límites y el significado de las frases. Para obtener más información sobre la implementación, consulte Coincidencia de frases.