The mapping change that needed a reindex and got one

A field that had to change from text to keyword, which is not an update.

# the attempt
PUT /products/_mapping
{ "properties": { "sku": { "type": "keyword" } } }
→ 400: mapper [sku] cannot be changed from type
  [text] to [keyword]

# the actual path
PUT /products-2025-05
POST /_reindex { "source": {"index":"products-2025-04"},
                 "dest": {"index":"products-2025-05"} }
POST /_aliases   # atomic swap

A mapping is append-only for existing fields, which is the constraint that makes an alias mandatory rather than a nicety. The eleven-minute rebuild is what makes this routine — the same change on an index that takes four hours to build is a maintenance window, and the difference is entirely in the bulk settings.