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.
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}