The _source field contains the original JSON document body that was passed
at index time. The _source field itself is not indexed (and thus is not
searchable), but it is stored so that it can be returned when executing
fetch requests, like get or search.
Though very handy to have around, the source field does incur storage overhead within the index. For this reason, it can be disabled as follows:
PUT tweets
{
"mappings": {
"_source": {
"enabled": false
}
}
}_source fieldUsers often disable the _source field without thinking about the
consequences, and then live to regret it. If the _source field isn’t
available then a number of features are not supported:
update, update_by_query,
and reindex APIs.
If disk space is a concern, rather increase the
compression level instead of disabling the _source.
An expert-only feature is the ability to prune the contents of the _source
field after the document has been indexed, but before the _source field is
stored.
Removing fields from the _source has similar downsides to disabling
_source, especially the fact that you cannot reindex documents from one
Elasticsearch index to another. Consider using
source filtering instead.
The includes/excludes parameters (which also accept wildcards) can be used
as follows:
PUT logs
{
"mappings": {
"_source": {
"includes": [
"*.count",
"meta.*"
],
"excludes": [
"meta.description",
"meta.other.*"
]
}
}
}
PUT logs/_doc/1
{
"requests": {
"count": 10,
"foo": "bar"
},
"meta": {
"name": "Some metric",
"description": "Some metric description",
"other": {
"foo": "one",
"baz": "two"
}
}
}
GET logs/_search
{
"query": {
"match": {
"meta.other.foo": "one"
}
}
}