Elasticsearch: is there a way to declare for all (possibly dynamic) subfields of an object field as string?
You're almost there.
First, your dynamic mapping's path must be on clearances.*
, and it must be a path_match
and not a plain match
.
Here's a runnable example: https://www.found.no/play/gist/df030f005da71827ca96
export ELASTICSEARCH_ENDPOINT="http://localhost:9200"# Create indexescurl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{ "settings": {}, "mappings": { "test": { "dynamic_templates": [ { "clearances_as_string": { "path_match": "clearances.*", "mapping": { "type": "string", "index": "not_analyzed" } } } ] } }}'# Index documentscurl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '{"index":{"_index":"play","_type":"test"}}{"clearances":{"glamis":1234,"cawdor":5678}}{"index":{"_index":"play","_type":"test"}}{"clearances":{"glamis":"aa2862jsgd","cawdor":"some string"}}'# Do searchescurl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d '{ "facets": { "cawdor": { "terms": { "field": "clearances.cawdor" } } }}'