Adding metadata to a mapping
Sometimes, when we are working with our mapping, we may need to store some additional data to be used for display purposes, ORM facilities, permissions, or simply to track them in the mapping.
Elasticsearch allows you to store every kind of JSON data you want in the mapping with the special _meta
field.
Getting ready
You will need an up-and-running Elasticsearch installation, as we described in the Downloading and installing Elasticsearch recipe of Chapter 1, Getting Started.
How to do it…
The _meta
mapping field can be populated with any data we want in JSON format, like so:
{ "_meta": { "attr1": ["value1", "value2"], "attr2": { "attr3": "value3" } } }
How it works…
When Elasticsearch processes a new mapping and finds a _meta
field, it stores it as-is in the global mapping status and propagates the information to all the cluster nodes. The content of the _meta
files is only checked to ensure it's a valid JSON format. Its content is not taken into consideration by Elasticsearch. You can populate it with everything you need to be in JSON format.
_meta
is only used for storing purposes; it's not indexed and searchable. It can be used to enrich your mapping with custom information that can be used by your applications.
It can be used for the following reasons:
- Storing type metadata:
{"name": "Address", "description": "This entity store address information"}
- Storing object relational mapping (ORM)-related information (such as mapping class and mapping transformations):
{"class": "com.company.package.AwesomeClass", "properties" : { "address":{"class": "com.company.package.Address"}} }
- Storing type permission information:
{"read":["user1", "user2"], "write":["user1"]}
- Storing extra type information (that is, the
icon
filename, which is used to display the type):{"icon":"fa fa-alert" }
- Storing template parts for rendering web interfaces:
{"fragment":"<div><h1>$name</h1><p>$description</p></div>" }