Command Palette

Search for a command to run...

ES·EN

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.

Puntos clave

  • El dynamic mapping es riesgoso en producción: un documento inesperado puede corromper el mapping para todos los documentos futuros. Usá siempre explicit mappings.
  • text es para búsqueda full-text (analizado, tokenizado). keyword es para matching exacto, sorting y aggregations (no analizado). La mayoría de los campos necesitan ambos via multi-fields.
  • Los index templates aplican el mapping al crear el índice. Usá component templates para compartir fragmentos de mapping entre múltiples index templates.

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}