60 lines
2.0 KiB
Plaintext
60 lines
2.0 KiB
Plaintext
[[mapping-transform]]
|
|
== Transform
|
|
The document can be transformed before it is indexed by registering a
|
|
script in the `transform` element of the mapping. The result of the
|
|
transform is indexed but the original source is stored in the `_source`
|
|
field. Example:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
{
|
|
"example" : {
|
|
"transform" : {
|
|
"script" : "if (ctx._source['title']?.startsWith('t')) ctx._source['suggest'] = ctx._source['content']",
|
|
"params" : {
|
|
"variable" : "not used but an example anyway"
|
|
},
|
|
"lang": "groovy"
|
|
},
|
|
"properties": {
|
|
"title": { "type": "string" },
|
|
"content": { "type": "string" },
|
|
"suggest": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
Its also possible to specify multiple transforms:
|
|
[source,js]
|
|
--------------------------------------------------
|
|
{
|
|
"example" : {
|
|
"transform" : [
|
|
{"script": "ctx._source['suggest'] = ctx._source['content']"}
|
|
{"script": "ctx._source['foo'] = ctx._source['bar'];"}
|
|
]
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
Because the result isn't stored in the source it can't normally be fetched by
|
|
source filtering. It can be highlighted if it is marked as stored.
|
|
|
|
=== Get Transformed
|
|
The get endpoint will retransform the source if the `_source_transform`
|
|
parameter is set. Example:
|
|
|
|
[source,bash]
|
|
--------------------------------------------------
|
|
curl -XGET "http://localhost:9200/test/example/3?pretty&_source_transform"
|
|
--------------------------------------------------
|
|
|
|
The transform is performed before any source filtering but it is mostly
|
|
designed to make it easy to see what was passed to the index for debugging.
|
|
|
|
=== Immutable Transformation
|
|
Once configured the transform script cannot be modified. This is not
|
|
because that is technically impossible but instead because madness lies
|
|
down that road.
|