Nivel 1 · 20 min
Mapping
El mapping define el schema de tu índice Elasticsearch: cómo se almacenan, indexan y buscan los campos. Diseñarlo bien desde el principio evita re-indexaciones costosas y la explosión de mapping en producción.
Dynamic vs Explicit Mapping
El dynamic mapping auto-detecta tipos de campo al indexar nuevos documentos. Es conveniente para desarrollo pero riesgoso en producción: un documento con un campo inesperado puede cambiar el mapping de todo el índice. Explicit mapping (definido antes de indexar) previene esto rechazando o ignorando campos desconocidos (dynamic: strict o dynamic: false). Best practice: siempre definir mappings explícitos para índices en producción.
Tipos de Campo: text vs keyword
Los campos text son analizados: el valor pasa por un analyzer (tokenización, lowercase, stemming) y se almacena como tokens. Esto permite búsqueda full-text pero impide filtros exactos y aggregations. Los campos keyword no son analizados: el valor se almacena tal cual, habilitando filtros exactos, sorting y aggregations. Un nombre de producto que necesita búsqueda full-text Y filtros facetados necesita multi-field: name como text para búsqueda y name.keyword como keyword para aggregation.
Multi-fields e Index Templates
Los multi-fields permiten indexar un campo de múltiples formas simultáneamente. El mapping especifica un sub-objeto fields. Los index templates (composable templates en ES 7.8+) aplican un mapping a todos los índices que coincidan con un patrón (e.g., logs-*). Separan responsabilidades: component templates contienen fragmentos de mapping reutilizables, index templates los componen. Esto garantiza que cada índice nuevo herede el mapping correcto sin intervención manual.
Code example
PUT /products\n{\n "mappings": {\n "dynamic": "strict",\n "properties": {\n "name": {\n "type": "text",\n "fields": {\n "keyword": {"type": "keyword"}\n }\n },\n "price": {"type": "float"},\n "tags": {"type": "keyword"},\n "description": {"type": "text"}\n }\n }\n}