id | slug | title | description | tags |
---|---|---|---|---|
enElasticsearchPainlessPainlessFieldContext |
/en/elasticsearch/painless/painless-field-context |
Field context |
Description to be written |
Use a Painless script to create a script field to return a customized value for each document in the results of a query.
Variables
params
(Map
, read-only)
: User-defined parameters passed in as part of the query.
doc
(Map
, read-only)
: Contains the fields of the specified document where each field is a
List
of values.
params['_source']
(Map
, read-only)
: Contains extracted JSON in a Map
and List
structure for the fields
existing in a stored document.
Return
Object
: The customized value for each document.
API
Both the standard Painless API and Specialized Field API are available.
Example
To run this example, first follow the steps in context examples.
You can then use these two example scripts to compute custom information for each search hit and output it to two new fields.
The first script gets the doc value for the datetime
field and calls
the getDayOfWeekEnum
function to determine the corresponding day of the week.
doc['datetime'].value.getDayOfWeekEnum().getDisplayName(TextStyle.FULL, Locale.ROOT)
The second script calculates the number of actors. Actors' names are stored
as a keyword array in the actors
field.
doc['actors'].size() [^1]
The following request returns the calculated day of week and the number of actors that appear in each play:
GET seats/_search
{
"size": 2,
"query": {
"match_all": {}
},
"script_fields": {
"day-of-week": {
"script": {
"source": "doc['datetime'].value.getDayOfWeekEnum().getDisplayName(TextStyle.FULL, Locale.ROOT)"
}
},
"number-of-actors": {
"script": {
"source": "doc['actors'].size()"
}
}
}
}
{/* TEST[setup:seats] */}
{
"took" : 68,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 11,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "seats",
"_id" : "1",
"_score" : 1.0,
"fields" : {
"day-of-week" : [
"Thursday"
],
"number-of-actors" : [
4
]
}
},
{
"_index" : "seats",
"_id" : "2",
"_score" : 1.0,
"fields" : {
"day-of-week" : [
"Thursday"
],
"number-of-actors" : [
1
]
}
}
]
}
}
{/* TESTRESPONSE[s/"took" : 68/"took" : "$body.took"/] */}