🏡 Home 📖 Chapter Home 👉 Next

⚡  ElasticsearchBook is crafted by Jozef Sorocin (🟢 Book a consulting hour) and powered by:

Use Case

with potentially lots of currently unknown attrs.* sub-objects.

I want to map all attrs.*.created_at fields as timestamps and the rest (attrs.*.*) as keywords.

At the same time, I want to set index: false on everything else inside attrs to not make it searchable.

Approach

Let's use dynamic_templates with path_match and path_unmatch.

Remarks

<aside> ⚠️ While the above solution works perfectly fine, dynamic_templates tend to monkey-patch the underlying issue of not being able to clearly define an index's mapping. On the other hand, there are situations where hard-coding the full mapping is not only onerous, but also impractical, and dynamic_templates do come in handy!

While wildcard attribute paths are supported in dynamic_templates, they are not in other parts of the Elasticsearch API such as aggregations. In practical terms this means that aggregating attrs.*.payload is not possible unless you resort to 6. (Painless) Scripting.

</aside>

Links

<aside> 🔗 The official documentation is available here.

</aside>