Command Palette

Search for a command to run...

ES·EN

Nivel 3 · 25 min

Analyzers

Los analyzers controlan cómo se transforma el texto antes de indexarse y cómo se parsean las query strings. Elegir el analyzer correcto determina si los usuarios encuentran lo que buscan: las elecciones incorrectas son bugs invisibles que se manifiestan como resultados faltantes.

Pipeline del Analyzer

Un analyzer tiene tres componentes aplicados en secuencia: character filters (transforman el texto crudo antes de la tokenización — html_strip elimina tags HTML, mapping reemplaza caracteres), tokenizer (divide el texto en tokens — standard divide en espacios/puntuación, keyword mantiene el string completo como un token, whitespace divide solo en espacios), token filters (transforman tokens — lowercase, eliminación de stop words, stemming, inyección de sinónimos, edge n-gram). La Analyze API permite probar cualquier analyzer: POST /_analyze con analyzer y text.

Analyzers de Idioma y Stemming

Los analyzers específicos de idioma manejan las reglas morfológicas de cada idioma: el analyzer english aplica stemming Porter (running → run, runs → run), elimina stop words en inglés y hace lowercase. Los analyzers de idioma mejoran el recall (encontrar ''running'' al buscar ''run'') a costo de algo de precisión. El stemming puede ser demasiado agresivo: ''universal'' y ''university'' pueden stemmearse a ''univers''. Para contenido multilingüe, usá el icu_tokenizer que maneja correctamente los límites de palabras Unicode.

Analyzers Personalizados para Autocomplete

Search-as-you-type (autocomplete) requiere hacer match de palabras parciales. El enfoque estándar usa edge n-grams: al indexar, ''laptop'' genera ''l'', ''la'', ''lap'', ''lapt'', ''lapto'', ''laptop''. Al buscar, se debe usar un analyzer diferente (sin n-gram) para evitar matching de n-grams contra n-grams, que produce falsos positivos. El campo search_analyzer en el mapping especifica el analyzer en tiempo de query.

Puntos clave

  • Pipeline del analyzer: character filters → tokenizer → token filters. Testeá con POST /_analyze antes de indexar datos de producción.
  • Los analyzers de idioma mejoran el recall via stemming pero pueden reducir la precisión. Testeá con vocabulario específico del dominio: las reglas de stemming no siempre son correctas para términos técnicos.
  • Para autocomplete con edge n-grams: usá un analyzer personalizado en tiempo de indexación (genera n-grams) y un analyzer simple/keyword en tiempo de búsqueda (previene falsos positivos n-gram vs n-gram).

Code example

// Test an analyzer before indexing\nPOST /_analyze\n{\n  "analyzer": "english",\n  "text": "The quick brown foxes are jumping"\n}\n// Returns tokens: quick, brown, fox, jump (stemmed, stops removed)\n\n// Custom autocomplete analyzer in mapping\nPUT /products\n{\n  "settings": {\n    "analysis": {\n      "analyzer": {\n        "autocomplete": {\n          "type": "custom",\n          "tokenizer": "standard",\n          "filter": ["lowercase", "edge_ngram_filter"]\n        }\n      }\n    }\n  },\n  "mappings": {\n    "properties": {\n      "name": {\n        "type": "text",\n        "analyzer": "autocomplete",\n        "search_analyzer": "standard"\n      }\n    }\n  }\n}