Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):Tokenizers de búsqueda

Última actualización: Sep 03, 2026

Los analizadores procesan y tokenizan campos de texto para que TairSearch pueda crear un índice y responder a consultas de texto completo. Cada analizador ejecuta tres etapas en orden: filtros de caracteres, un tokenizer y filtros de tokens. TairSearch incluye nueve analizadores integrados. Si tiene requisitos especializados, puede construir un analizador personalizado a partir de componentes individuales.

Analyzer workflow

Etapa

Propósito

Cantidad por analizador

Filtro de caracteres

Preprocesa el texto sin formato antes de la tokenización (por ejemplo, reemplaza :) con _happy_)

Cero o más, se ejecutan en orden

Tokenizer

Divide el texto preprocesado en tokens

Exactamente uno

Filtro de tokens

Post-procesa cada token (por ejemplo, conversión a minúsculas, eliminación de palabras vacías, stemming)

Cero o más, se ejecutan en orden

Elegir un analizador

Analizador

Ideal para

Tokeniza por

Convierte a minúsculas

Filtra palabras vacías

Standard

La mayoría de los idiomas

Límites de palabras Unicode

Sí

Sí

Stop

La mayoría de los idiomas (enfoque en palabras vacías)

Caracteres no alfabéticos

Sí

Sí

Jieba

Texto en chino

Diccionario entrenado

Solo tokens en inglés

Sí

IK

Texto en chino (compatible con Elasticsearch)

Diccionario entrenado (dos modos)

Sí (predeterminado)

Opcional

Pattern

Lógica de delimitadores personalizados

Patrón regex

Opcional

Opcional

Whitespace

Texto pre-tokenizado o estructurado

Caracteres de espacio en blanco

No

No

Simple

Texto occidental, sin distinción entre mayúsculas y minúsculas

Caracteres no alfabéticos

Sí

No

Keyword

Campos de coincidencia exacta

Sin división (todo el campo = un token)

No

No

Language

Idiomas naturales específicos

Reglas específicas del idioma

Sí

Sí

Funcionamiento

Un analizador procesa un documento a través de tres etapas secuenciales.

Etapa 1 — Filtro de caracteres: Cero o más filtros de caracteres preprocesan el texto sin formato del documento. Los filtros se ejecutan en el orden en que aparecen. Por ejemplo, un filtro de caracteres de asignación puede reemplazar "(:" con "happy" antes de que comience la tokenización.

Etapa 2 — Tokenizer: Exactamente un tokenizer divide el texto (posiblemente filtrado) en tokens. Por ejemplo, el tokenizer de espacios en blanco divide "I am very happy" en ["I", "am", "very", "happy"].

Etapa 3 — Filtro de tokens: Cero o más filtros de tokens post-procesan los tokens generados por el tokenizer. Los filtros se ejecutan en el orden en que aparecen. Por ejemplo, el filtro de tokens de parada elimina palabras comunes como "the" y "is".

Analizadores integrados

Standard

El analizador estándar es la opción predeterminada para la mayoría de los idiomas. Divide el texto según los límites de palabras Unicode (de acuerdo con el Anexo #29 del Estándar Unicode), convierte todos los tokens a minúsculas y elimina las palabras vacías comunes.

Components: standard tokenizer → lowercase token filter → stop token filter

No se incluyen filtros de caracteres.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

stopwords

Arreglo de palabras vacías para filtrar. Reemplaza la lista predeterminada en su totalidad.

Consulte abajo

max_token_length

Longitud máxima de caracteres por token. Los tokens que superen este límite se dividen.

255

Palabras vacías predeterminadas:

["a", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in",
 "into", "is", "it", "no", "not", "of", "on", "or", "such", "that", "the",
 "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "standard"
      }
    }
  }
}
// Custom stop words and token length
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "standard",
          "max_token_length": 10,
          "stopwords": ["memory", "disk", "is", "a"]
        }
      }
    }
  }
}

Stop

El analizador stop divide el texto en cualquier carácter no alfabético, convierte todos los tokens a minúsculas y elimina las palabras vacías.

Components: lowercase tokenizer → stop token filter

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

stopwords

Arreglo de palabras vacías para filtrar. Reemplaza la lista predeterminada en su totalidad.

Igual que standard

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "stop"
      }
    }
  }
}
// Custom stop words
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "stop",
          "stopwords": ["memory", "disk", "is", "a"]
        }
      }
    }
  }
}

Jieba

El analizador jieba se recomienda para texto en chino. Divide el texto mediante la segmentación basada en diccionarios de jieba, convierte los tokens en inglés a minúsculas y elimina las palabras vacías.

Components: jieba tokenizer → lowercase token filter → stop token filter

Importante
  • El analizador jieba carga un diccionario integrado de 20 MB en memoria. Solo se carga una copia de forma global. El primer uso de jieba puede provocar un breve aumento de latencia mientras se carga el diccionario.

  • Las palabras en un diccionario personalizado no pueden contener espacios ni ninguno de los siguientes caracteres: \t, \n, ,, 。

Parámetros opcionales:

Parámetro Descripción Valor predeterminado
userwords Arreglo de cadenas que se agregan al diccionario predeterminado. Consulte el diccionario predeterminado de Jiebadiccionario predeterminado de jieba. Vacío
use_hmm Usa un modelo oculto de Markov (HMM) para manejar palabras fuera del vocabulario. true
stopwords Arreglo de palabras vacías para filtrar. Reemplaza la lista predeterminada en su totalidad. Consulte las palabras vacías predeterminadas de Jiebapalabras vacías predeterminadas de jieba. Lista integrada

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "jieba"
      }
    }
  }
}
// Custom dictionary, stop words, and HMM
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "jieba",
          "stopwords": ["memory", "disk", "is", "a"],
          "userwords": ["Redis", "open-source", "flexible"],
          "use_hmm": true
        }
      }
    }
  }
}

IK

El analizador IK divide texto en chino y es compatible con el complemento del analizador IK para Alibaba Cloud Elasticsearch. Admite dos modos:

  • ik_max_word: identifica todos los tokens posibles.

  • ik_smart: filtra los resultados del modo ik_max_word para identificar los tokens más probables.

Componentes: IK tokenizer (sin filtros de tokens de forma predeterminada)

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

stopwords

Arreglo de palabras vacías para filtrar. Reemplaza la lista predeterminada en su totalidad.

Igual que standard

userwords

Arreglo de cadenas que se agregan al diccionario IK predeterminado. Consulte el diccionario IK predeterminado.

Vacío

quantifiers

Arreglo de cuantificadores que se agregan al diccionario de cuantificadores IK predeterminado. Consulte el diccionario de cuantificadores predeterminado.

Vacío

enable_lowercase

Convierte letras mayúsculas a minúsculas antes de la tokenización.

true

Importante

Si su diccionario personalizado contiene letras mayúsculas, establezca enable_lowercase en false. La conversión a minúsculas ocurre antes de la división, por lo que las entradas en mayúsculas del diccionario nunca coincidirían.

Ejemplos de configuración:

// Default configuration: both IK modes
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "f1": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}
// Custom stop words, dictionary, and quantifiers
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_ik_smart_analyzer"
      },
      "f1": {
        "type": "text",
        "analyzer": "my_ik_max_word_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ik_smart_analyzer": {
          "type": "ik_smart",
          "stopwords": ["memory", "disk", "is", "a"],
          "userwords": ["Redis", "open-source", "flexible"],
          "quantifiers": ["ns"],
          "enable_lowercase": false
        },
        "my_ik_max_word_analyzer": {
          "type": "ik_max_word",
          "stopwords": ["memory", "disk", "is", "a"],
          "userwords": ["Redis", "open-source", "flexible"],
          "quantifiers": ["ns"],
          "enable_lowercase": false
        }
      }
    }
  }
}

Pattern

El analizador pattern divide el texto mediante una expresión regular. De forma predeterminada, el texto coincidente se trata como un delimitador (los tokens son el texto entre las coincidencias). También convierte los tokens a minúsculas y filtra las palabras vacías.

Components: pattern tokenizer → lowercase token filter → stop token filter

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

pattern

Expresión regular. El texto que coincide con el patrón se usa como delimitador. Consulte la sintaxis RE2.

\W+

stopwords

Arreglo de palabras vacías. Reemplaza la lista predeterminada en su totalidad.

Igual que standard

lowercase

Convierte los tokens a minúsculas.

true

flags

Establezca en CASE_INSENSITIVE para que la expresión regular no distinga entre mayúsculas y minúsculas.

Vacío (distingue mayúsculas y minúsculas)

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "pattern"
      }
    }
  }
}
// Custom pattern with case-insensitive matching
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "pattern",
          "pattern": "\\'([^\\']+)\\'",
          "stopwords": ["aaa", "@"],
          "lowercase": false,
          "flags": "CASE_INSENSITIVE"
        }
      }
    }
  }
}

Whitespace

El analizador whitespace divide el texto en los caracteres de espacio en blanco. No convierte los tokens a minúsculas ni elimina las palabras vacías.

Componentes: whitespace tokenizer

Parámetros opcionales: Ninguno

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "whitespace"
      }
    }
  }
}

Simple

El analizador simple divide el texto en cualquier carácter no alfabético y convierte todos los tokens a minúsculas. No filtra palabras vacías.

Componentes: lowercase tokenizer

Parámetros opcionales: Ninguno

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "simple"
      }
    }
  }
}

Keyword

El analizador keyword trata todo el valor del campo como un solo token sin ninguna división. Úselo para campos que requieren consultas de coincidencia exacta, como identificadores, códigos de estado o etiquetas.

Componentes: keyword tokenizer

Parámetros opcionales: Ninguno

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "keyword"
      }
    }
  }
}

Language

El analizador language admite tokenización específica del idioma y eliminación de palabras vacías para un conjunto fijo de idiomas: arabic, cjk, chinese, brazilian, czech, german, greek, persian, french, dutch y russian.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

Idiomas compatibles

stopwords

Arreglo de palabras vacías. Reemplaza la lista predeterminada. Consulte Appendix 4 para ver los valores predeterminados.

Específico del idioma

Todos excepto chinese

stem_exclusion

Arreglo de palabras cuyas raíces no se extraen. Por ejemplo, agregar "apples" evita que se reduzca a "apple".

Vacío

brazilian, german, french, dutch

Las palabras vacías del analizador chinese no se pueden modificar.

Ejemplos de configuración:

// Default configuration (Arabic)
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "arabic"
      }
    }
  }
}
// Custom stop words and stem exclusion (German)
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "german",
          "stopwords": ["ein"],
          "stem_exclusion": ["speicher"]
        }
      }
    }
  }
}

Analizadores personalizados

Construya un analizador personalizado cuando ningún analizador integrado se ajuste a sus necesidades. Defina el analizador en settings y haga referencia a él por su nombre en mappings.

Parámetros:

Parámetro

Obligatorio

Descripción

Valores válidos

type

Sí

Identifica esto como un analizador personalizado.

custom

tokenizer

Sí

El tokenizer que se usará. Solo se permite uno.

whitespace, lowercase, standard, classic, letter, keyword, jieba, pattern, ik_max_word, ik_smart

char_filter

No

Arreglo de filtros de caracteres para aplicar antes de la tokenización.

mapping (consulte Appendix 1)

filter

No

Arreglo de filtros de tokens para aplicar después de la tokenización.

classic, elision, lowercase, snowball, stop, asciifolding, length, arabic_normalization, persian_normalization (consulte Appendix 3)

Ejemplo: analizador personalizado con reemplazo de emoticonos y eliminación de palabras vacías

// Character filters replace emoticons and expand "&" before tokenization.
// The whitespace tokenizer splits on spaces.
// Token filters lowercase and remove stop words.
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["lowercase", "stop"],
          "char_filter": ["emoticons", "conjunctions"]
        }
      },
      "char_filter": {
        "emoticons": {
          "type": "mapping",
          "mappings": [":) => _happy_", ":( => _sad_"]
        },
        "conjunctions": {
          "type": "mapping",
          "mappings": ["&=>and"]
        }
      }
    }
  }
}

Apéndice 1: Filtros de caracteres compatibles

Filtro de caracteres mapping

Reemplaza cadenas especificadas mediante pares clave-valor. Cuando la entrada contiene una clave, se reemplaza con el valor correspondiente. Se pueden usar varios filtros de caracteres de asignación en un solo analizador.

Parámetros:

Parámetro

Obligatorio

Descripción

mappings

Sí

Arreglo de reglas de reemplazo. Cada regla debe usar el formato "key => value". Por ejemplo: "& => and".

Ejemplo de configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "char_filter": ["emoticons"]
        }
      },
      "char_filter": {
        "emoticons": {
          "type": "mapping",
          "mappings": [":) => _happy_", ":( => _sad_"]
        }
      }
    }
  }
}

Apéndice 2: Tokenizers compatibles

whitespace

Divide el texto en los caracteres de espacio en blanco. Los tokens que excedan max_token_length se dividen en el límite.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

max_token_length

Longitud máxima de caracteres por token. Los tokens que superen este límite se dividen.

255

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace"
        }
      }
    }
  }
}
// Custom max token length
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "token1"
        }
      },
      "tokenizer": {
        "token1": {
          "type": "whitespace",
          "max_token_length": 2
        }
      }
    }
  }
}

standard

Divide el texto mediante el algoritmo de segmentación de texto Unicode (Anexo #29 del Estándar Unicode). Adecuado para la mayoría de los idiomas.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

max_token_length

Longitud máxima de caracteres por token. Los tokens que superen este límite se dividen.

255

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard"
        }
      }
    }
  }
}
// Custom max token length
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "token1"
        }
      },
      "tokenizer": {
        "token1": {
          "type": "standard",
          "max_token_length": 2
        }
      }
    }
  }
}

classic

Divide el texto mediante reglas gramaticales del inglés y maneja patrones específicos de forma especial:

  • Divide en signos de puntuación y los elimina. Los puntos (.) rodeados de caracteres que no son espacios en blanco se conservan; por ejemplo, red.apple no se divide, pero red. apple produce red y apple.

  • Divide en guiones, a menos que el token contenga dígitos (se interpreta como un número de producto y se mantiene intacto).

  • Reconoce direcciones de correo electrónico y nombres de host como tokens únicos.

Los tokens que excedan max_token_length se omiten, no se dividen.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

max_token_length

Longitud máxima de caracteres por token. Los tokens que superen este límite se omiten.

255

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "classic"
        }
      }
    }
  }
}
// Custom max token length
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "token1"
        }
      },
      "tokenizer": {
        "token1": {
          "type": "classic",
          "max_token_length": 2
        }
      }
    }
  }
}

letter

Divide el texto en cualquier carácter no alfabético. Funciona bien para idiomas europeos.

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "letter"
        }
      }
    }
  }
}

lowercase

Divide el texto en cualquier carácter no alfabético y convierte todos los tokens a minúsculas. Equivale a combinar el tokenizer letter con el filtro de tokens lowercase, pero es más rápido porque recorre el documento solo una vez.

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "lowercase"
        }
      }
    }
  }
}

keyword

Trata toda la entrada como un solo token sin dividirla. Normalmente se combina con un filtro de tokens como lowercase.

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "keyword"
        }
      }
    }
  }
}

jieba

Divide texto en chino mediante un diccionario entrenado. Recomendado para campos en idioma chino.

Importante

Las palabras en un diccionario personalizado no pueden contener espacios ni ninguno de los siguientes caracteres: \t, \n, ,, 。

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

userwords

Arreglo de cadenas que se agregan al diccionario predeterminado. Consulte el diccionario predeterminado de jieba.

Vacío

use_hmm

Usa un modelo oculto de Markov (HMM) para manejar palabras fuera del vocabulario.

true

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "jieba"
        }
      }
    }
  }
}
// Custom dictionary
{
  "mappings": {
    "properties": {
      "f1": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "token1"
        }
      },
      "tokenizer": {
        "token1": {
          "type": "jieba",
          "userwords": ["Redis", "open-source", "flexible"],
          "use_hmm": true
        }
      }
    }
  }
}

pattern

Divide el texto mediante una expresión regular. El texto coincidente se trata como un delimitador de forma predeterminada. Use el parámetro group para tratar el texto coincidente como tokens en su lugar.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

pattern

Expresión regular. Consulte la sintaxis RE2.

\W+

group

Controla cómo se usa el resultado de la expresión regular. -1 usa el texto coincidente como delimitadores. 0 usa la coincidencia completa como un token. 1 o superior usa el grupo de captura correspondiente como un token.

-1

flags

Establezca en CASE_INSENSITIVE para que la expresión regular no distinga entre mayúsculas y minúsculas.

Vacío (distingue mayúsculas y minúsculas)

Ejemplo del comportamiento de group:

Regex: "a(b+)c", entrada: "abbbcdefabc"

  • group: 0 → tokens: [ abbbc, abc ] (coincidencias completas)

  • group: 1 → tokens: [ bbb, b ] (primer grupo de captura)

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "pattern"
        }
      }
    }
  }
}
// Custom pattern with capture group
{
  "mappings": {
    "properties": {
      "f1": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "pattern_tokenizer"
        }
      },
      "tokenizer": {
        "pattern_tokenizer": {
          "type": "pattern",
          "pattern": "AB(A(\\w+)C)",
          "flags": "CASE_INSENSITIVE",
          "group": 2
        }
      }
    }
  }
}

IK

Divide texto en chino. Admite dos modos:

  • ik_max_word: identifica todos los tokens posibles (granularidad máxima).

  • ik_smart: identifica los tokens más probables (granularidad más gruesa).

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

stopwords

Arreglo de palabras vacías. Reemplaza la lista predeterminada en su totalidad.

Igual que standard

userwords

Arreglo de cadenas que se agregan al diccionario IK predeterminado. Consulte el diccionario IK predeterminado.

Vacío

quantifiers

Arreglo de cuantificadores que se agregan al diccionario de cuantificadores predeterminado. Consulte el diccionario de cuantificadores predeterminado.

Vacío

enable_lowercase

Convierte letras mayúsculas a minúsculas antes de la tokenización.

true

Importante

Si su diccionario personalizado contiene letras mayúsculas, establezca enable_lowercase en false. La conversión a minúsculas ocurre antes de la división.

Ejemplos de configuración:

// Default configuration: both IK modes
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_ik_smart_analyzer"
      },
      "f1": {
        "type": "text",
        "analyzer": "my_custom_ik_max_word_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_ik_smart_analyzer": {
          "type": "custom",
          "tokenizer": "ik_smart"
        },
        "my_custom_ik_max_word_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  }
}
// Custom dictionary, stop words, and quantifiers
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_ik_smart_analyzer"
      },
      "f1": {
        "type": "text",
        "analyzer": "my_custom_ik_max_word_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_ik_smart_analyzer": {
          "type": "custom",
          "tokenizer": "my_ik_smart_tokenizer"
        },
        "my_custom_ik_max_word_analyzer": {
          "type": "custom",
          "tokenizer": "my_ik_max_word_tokenizer"
        }
      },
      "tokenizer": {
        "my_ik_smart_tokenizer": {
          "type": "ik_smart",
          "userwords": ["The tokenizer for the Chinese language", "The custom stop words"],
          "stopwords": ["about", "test"],
          "quantifiers": ["ns"],
          "enable_lowercase": false
        },
        "my_ik_max_word_tokenizer": {
          "type": "ik_max_word",
          "userwords": ["The tokenizer for the Chinese language", "The custom stop words"],
          "stopwords": ["about", "test"],
          "quantifiers": ["ns"],
          "enable_lowercase": false
        }
      }
    }
  }
}

Apéndice 3: Filtros de tokens compatibles

classic

Elimina el posesivo 's del final de los tokens y quita los puntos de los acrónimos. Por ejemplo, Fig. se convierte en Fig.

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "classic",
          "filter": ["classic"]
        }
      }
    }
  }
}

elision

Elimina las elisiones especificadas al inicio de los tokens. Se utiliza principalmente para texto en francés (por ejemplo, l'avion → avion).

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

articles

Arreglo de elisiones que se deben eliminar. Reemplaza por completo la lista predeterminada.

["l", "m", "t", "qu", "n", "s", "j"]

articles_case

Indica si la coincidencia de elisiones distingue entre mayúsculas y minúsculas.

false

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["elision"]
        }
      }
    }
  }
}
// Custom elisions with case-sensitive matching
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["elision_filter"]
        }
      },
      "filter": {
        "elision_filter": {
          "type": "elision",
          "articles": ["l", "m", "t", "qu", "n", "s", "j"],
          "articles_case": true
        }
      }
    }
  }
}

lowercase

Convierte todos los tokens a minúsculas.

Parámetros opcionales:

Parámetro

Descripción

Valores válidos

language

Aplica reglas de conversión a minúsculas específicas del idioma. Si no se establece, se aplican las reglas estándar del inglés.

greek, russian

Ejemplos de configuración:

// Default configuration (English)
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["lowercase"]
        }
      }
    }
  }
}
// Language-specific lowercasing (Greek and Russian)
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_greek_analyzer"
      },
      "f1": {
        "type": "text",
        "analyzer": "my_custom_russian_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_greek_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["greek_lowercase"]
        },
        "my_custom_russian_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["russian_lowercase"]
        }
      },
      "filter": {
        "greek_lowercase": {
          "type": "lowercase",
          "language": "greek"
        },
        "russian_lowercase": {
          "type": "lowercase",
          "language": "russian"
        }
      }
    }
  }
}

snowball

Extrae la raíz de cada token. Por ejemplo, cats se convierte en cat y running se convierte en run.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

Valores válidos

language

El idioma cuyas reglas de extracción de raíces se deben aplicar.

english

english, german, french, dutch

Ejemplos de configuración:

// Default configuration (English)
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["snowball"]
        }
      }
    }
  }
}
// English stemming with standard tokenizer
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["my_filter"]
        }
      },
      "filter": {
        "my_filter": {
          "type": "snowball",
          "language": "english"
        }
      }
    }
  }
}

stop

Elimina las palabras vacías del flujo de tokens.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

stopwords

Arreglo de palabras vacías. Reemplaza por completo la lista predeterminada.

Igual que el estándar

ignoreCase

Indica si la coincidencia de palabras vacías no distingue entre mayúsculas y minúsculas.

false

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["stop"]
        }
      }
    }
  }
}
// Custom stop words with case-insensitive matching
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["stop_filter"]
        }
      },
      "filter": {
        "stop_filter": {
          "type": "stop",
          "stopwords": ["the"],
          "ignore_case": true
        }
      }
    }
  }
}

asciifolding

Convierte caracteres alfabéticos, numéricos y simbólicos fuera del bloque Unicode Basic Latin a sus equivalentes ASCII. Por ejemplo, é se convierte en e y ü se convierte en u. Utilice este filtro para normalizar caracteres acentuados en texto europeo.

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["asciifolding"]
        }
      }
    }
  }
}

length

Elimina los tokens cuya longitud es menor o mayor que los límites de caracteres especificados.

Parámetros opcionales:

Parámetro

Descripción

Valor predeterminado

min

Número mínimo de caracteres que debe tener un token para conservarse.

0

max

Número máximo de caracteres que puede tener un token para conservarse.

2147483647 (2^31 - 1)

Ejemplos de configuración:

// Default configuration
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["length"]
        }
      }
    }
  }
}
// Keep only tokens between 2 and 5 characters
{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["length_filter"]
        }
      },
      "filter": {
        "length_filter": {
          "type": "length",
          "max": 5,
          "min": 2
        }
      }
    }
  }
}

Normalización

Normaliza caracteres específicos de un idioma. Utilice arabic_normalization para texto en árabe y persian_normalization para texto en persa. Combine este filtro con el tokenizer estándar para obtener mejores resultados.

Configuración:

{
  "mappings": {
    "properties": {
      "f0": {
        "type": "text",
        "analyzer": "my_arabic_analyzer"
      },
      "f1": {
        "type": "text",
        "analyzer": "my_persian_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "my_arabic_analyzer": {
          "type": "custom",
          "tokenizer": "arabic",
          "filter": ["arabic_normalization"]
        },
        "my_persian_analyzer": {
          "type": "custom",
          "tokenizer": "arabic",
          "filter": ["persian_normalization"]
        }
      }
    }
  }
}

Apéndice 4: Palabras vacías predeterminadas para analizadores de idioma

arabic

["من","ومن","منها","منه","في","وفي","فيها","فيه","و","ف","ثم","او","أو","ب","بها","به","ا","أ","اى","اي","أي","أى","لا","ولا","الا","ألا","إلا","لكن","ما","وما","كما","فما","عن","مع","اذا","إذا","ان","أن","إن","انها","أنها","إنها","انه","أنه","إنه","بان","بأن","فان","فأن","وان","وأن","وإن","التى","التي","الذى","الذي","الذين","الى","الي","إلى","إلي","على","عليها","عليه","اما","أما","إما","ايضا","أيضا","كل","وكل","لم","ولم","لن","ولن","هى","هي","هو","وهى","وهي","وهو","فهى","فهي","فهو","انت","أنت","لك","لها","له","هذه","هذا","تلك","ذلك","هناك","كانت","كان","يكون","تكون","وكانت","وكان","غير","بعض","قد","نحو","بين","بينما","منذ","ضمن","حيث","الان","الآن","خلال","بعد","قبل","حتى","عند","عندما","لدى","جميع"]

cjk

["with","will","to","this","there","then","the","t","that","such","s","on","not","no","it","www","was","is","","into","their","or","in","if","for","by","but","they","be","these","at","are","as","and","of","a"]

brazilian

["uns","umas","uma","teu","tambem","tal","suas","sobre","sob","seu","sendo","seja","sem","se","quem","tua","que","qualquer","porque","por","perante","pelos","pelo","outros","outro","outras","outra","os","o","nesse","nas","na","mesmos","mesmas","mesma","um","neste","menos","quais","mediante","proprio","logo","isto","isso","ha","estes","este","propios","estas","esta","todas","esses","essas","toda","entre","nos","entao","em","eles","qual","elas","tuas","ela","tudo","do","mesmo","diversas","todos","diversa","seus","dispoem","ou","dispoe","teus","deste","quer","desta","diversos","desde","quanto","depois","demais","quando","essa","deles","todo","pois","dele","dela","dos","de","da","nem","cujos","das","cujo","durante","cujas","portanto","cuja","contudo","ele","contra","como","com","pelas","assim","as","aqueles","mais","esse","aquele","mas","apos","aos","aonde","sua","e","ao","antes","nao","ambos","ambas","alem","ainda","a"]

czech

["a","s","k","o","i","u","v","z","dnes","cz","tímto","budeš","budem","byli","jseš","muj","svým","ta","tomto","tohle","tuto","tyto","jej","zda","proc","máte","tato","kam","tohoto","kdo","kterí","mi","nám","tom","tomuto","mít","nic","proto","kterou","byla","toho","protože","asi","ho","naši","napište","re","což","tím","takže","svých","její","svými","jste","aj","tu","tedy","teto","bylo","kde","ke","pravé","ji","nad","nejsou","ci","pod","téma","mezi","pres","ty","pak","vám","ani","když","však","neg","jsem","tento","clánku","clánky","aby","jsme","pred","pta","jejich","byl","ješte","až","bez","také","pouze","první","vaše","která","nás","nový","tipy","pokud","muže","strana","jeho","své","jiné","zprávy","nové","není","vás","jen","podle","zde","už","být","více","bude","již","než","který","by","které","co","nebo","ten","tak","má","pri","od","po","jsou","jak","další","ale","si","se","ve","to","jako","za","zpet","ze","do","pro","je","na","atd","atp","jakmile","pricemž","já","on","ona","ono","oni","ony","my","vy","jí","ji","me","mne","jemu","tomu","tem","temu","nemu","nemuž","jehož","jíž","jelikož","jež","jakož","nacež"]

german

["wegen","mir","mich","dich","dir","ihre","wird","sein","auf","durch","ihres","ist","aus","von","im","war","mit","ohne","oder","kein","wie","was","es","sie","mein","er","du","daß","dass","die","als","ihr","wir","der","für","das","einen","wer","einem","am","und","eines","eine","in","einer"]

greek

["ο","η","το","οι","τα","του","τησ","των","τον","την","και","κι","κ","ειμαι","εισαι","ειναι","ειμαστε","ειστε","στο","στον","στη","στην","μα","αλλα","απο","για","προσ","με","σε","ωσ","παρα","αντι","κατα","μετα","θα","να","δε","δεν","μη","μην","επι","ενω","εαν","αν","τοτε","που","πωσ","ποιοσ","ποια","ποιο","ποιοι","ποιεσ","ποιων","ποιουσ","αυτοσ","αυτη","αυτο","αυτοι","αυτων","αυτουσ","αυτεσ","αυτα","εκεινοσ","εκεινη","εκεινο","εκεινοι","εκεινεσ","εκεινα","εκεινων","εκεινουσ","οπωσ","ομωσ","ισωσ","οσο","οτι"]

persian

["انان","نداشته","سراسر","خياه","ايشان","وي","تاكنون","بيشتري","دوم","پس","ناشي","وگو","يا","داشتند","سپس","هنگام","هرگز","پنج","نشان","امسال","ديگر","گروهي","شدند","چطور","ده","و","دو","نخستين","ولي","چرا","چه","وسط","ه","كدام","قابل","يك","رفت","هفت","همچنين","در","هزار","بله","بلي","شايد","اما","شناسي","گرفته","دهد","داشته","دانست","داشتن","خواهيم","ميليارد","وقتيكه","امد","خواهد","جز","اورده","شده","بلكه","خدمات","شدن","برخي","نبود","بسياري","جلوگيري","حق","كردند","نوعي","بعري","نكرده","نظير","نبايد","بوده","بودن","داد","اورد","هست","جايي","شود","دنبال","داده","بايد","سابق","هيچ","همان","انجا","كمتر","كجاست","گردد","كسي","تر","مردم","تان","دادن","بودند","سري","جدا","ندارند","مگر","يكديگر","دارد","دهند","بنابراين","هنگامي","سمت","جا","انچه","خود","دادند","زياد","دارند","اثر","بدون","بهترين","بيشتر","البته","به","براساس","بيرون","كرد","بعضي","گرفت","توي","اي","ميليون","او","جريان","تول","بر","مانند","برابر","باشيم","مدتي","گويند","اكنون","تا","تنها","جديد","چند","بي","نشده","كردن","كردم","گويد","كرده","كنيم","نمي","نزد","روي","قصد","فقط","بالاي","ديگران","اين","ديروز","توسط","سوم","ايم","دانند","سوي","استفاده","شما","كنار","داريم","ساخته","طور","امده","رفته","نخست","بيست","نزديك","طي","كنيد","از","انها","تمامي","داشت","يكي","طريق","اش","چيست","روب","نمايد","گفت","چندين","چيزي","تواند","ام","ايا","با","ان","ايد","ترين","اينكه","ديگري","راه","هايي","بروز","همچنان","پاعين","كس","حدود","مختلف","مقابل","چيز","گيرد","ندارد","ضد","همچون","سازي","شان","مورد","باره","مرسي","خويش","برخوردار","چون","خارج","شش","هنوز","تحت","ضمن","هستيم","گفته","فكر","بسيار","پيش","براي","روزهاي","انكه","نخواهد","بالا","كل","وقتي","كي","چنين","كه","گيري","نيست","است","كجا","كند","نيز","يابد","بندي","حتي","توانند","عقب","خواست","كنند","بين","تمام","همه","ما","باشند","مثل","شد","اري","باشد","اره","طبق","بعد","اگر","صورت","غير","جاي","بيش","ريزي","اند","زيرا","چگونه","بار","لطفا","مي","درباره","من","ديده","همين","گذاري","برداري","علت","گذاشته","هم","فوق","نه","ها","شوند","اباد","همواره","هر","اول","خواهند","چهار","نام","امروز","مان","هاي","قبل","كنم","سعي","تازه","را","هستند","زير","جلوي","عنوان","بود"]

french

["ô","être","vu","vous","votre","un","tu","toute","tout","tous","toi","tiens","tes","suivant","soit","soi","sinon","siennes","si","se","sauf","s","quoi","vers","qui","quels","ton","quelle","quoique","quand","près","pourquoi","plus","à","pendant","partant","outre","on","nous","notre","nos","tienne","ses","non","qu","ni","ne","mêmes","même","moyennant","mon","moins","va","sur","moi","miens","proche","miennes","mienne","tien","mien","n","malgré","quelles","plein","mais","là","revoilà","lui","leurs","๺","toutes","le","où","la","l","jusque","jusqu","ils","hélas","ou","hormis","laquelle","il","eu","nôtre","etc","est","environ","une","entre","en","son","elles","elle","dès","durant","duquel","été","du","voici","par","dont","donc","voilà","hors","doit","plusieurs","diverses","diverse","divers","devra","devers","tiennes","dessus","etre","dessous","desquels","desquelles","ès","et","désormais","des","te","pas","derrière","depuis","delà","hui","dehors","sans","dedans","debout","vôtre","de","dans","nôtres","mes","d","y","vos","je","concernant","comme","comment","combien","lorsque","ci","ta","nບnmoins","lequel","chez","contre","ceux","cette","j","cet","seront","que","ces","leur","certains","certaines","puisque","certaine","certain","passé","cependant","celui","lesquelles","celles","quel","celle","devant","cela","revoici","eux","ceci","sienne","merci","ce","c","siens","les","avoir","sous","avec","pour","parmi","avant","car","avait","sont","me","auxquels","sien","sa","excepté","auxquelles","aux","ma","autres","autre","aussi","auquel","aujourd","au","attendu","selon","après","ont","ainsi","ai","afin","vôtres","lesquels","a"]

dutch

["andere","uw","niets","wil","na","tegen","ons","wordt","werd","hier","eens","onder","alles","zelf","hun","dus","kan","ben","meer","iets","me","veel","omdat","zal","nog","altijd","ja","want","u","zonder","deze","hebben","wie","zij","heeft","hoe","nu","heb","naar","worden","haar","daar","der","je","doch","moet","tot","uit","bij","geweest","kon","ge","zich","wezen","ze","al","zo","dit","waren","men","mijn","kunnen","wat","zou","dan","hem","om","maar","ook","er","had","voor","of","als","reeds","door","met","over","aan","mij","was","is","geen","zijn","niet","iemand","het","hij","een","toen","in","toch","die","dat","te","doen","ik","van","op","en","de"]

russian

["а","без","более","бы","был","была","были","было","быть","в","вам","вас","весь","во","вот","все","всего","всех","вы","где","да","даже","для","до","его","ее","ей","ею","если","есть","еще","же","за","здесь","и","из","или","им","их","к","как","ко","когда","кто","ли","либо","мне","может","мы","на","надо","наш","не","него","нее","нет","ни","них","но","ну","о","об","однако","он","она","они","оно","от","очень","по","под","при","с","со","так","также","такой","там","те","тем","то","того","тоже","той","только","том","ты","у","уже","хотя","чего","чей","чем","что","чтобы","чье","чья","эта","эти","это","я"]