forked from elastic/elasticsearch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[DOCS] Adds an MDX file for testing purposes. (elastic#106165)
- Loading branch information
1 parent
37542e6
commit 4573921
Showing
1 changed file
with
136 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
--- | ||
id: enElasticsearchPainlessPainlessFieldContext | ||
slug: /en/elasticsearch/painless/painless-field-context | ||
title: Field context | ||
description: Description to be written | ||
tags: [] | ||
--- | ||
|
||
<div id="painless-field-context"></div> | ||
|
||
Use a Painless script to create a | ||
[script field](((ref))/search-fields.html#script-fields) 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']`](((ref))/mapping-source-field.html) (`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 <DocLink id="enElasticsearchPainlessPainlessApiReferenceShared">Painless API</DocLink> and | ||
<DocLink id="enElasticsearchPainlessPainlessApiReferenceField">Specialized Field API</DocLink> are available. | ||
|
||
**Example** | ||
|
||
To run this example, first follow the steps in | ||
<DocLink id="enElasticsearchPainlessPainlessContextExamples">context examples</DocLink>. | ||
|
||
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. | ||
|
||
```Painless | ||
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. | ||
|
||
```Painless | ||
doc['actors'].size() [^1] | ||
``` | ||
[^1]: By default, doc values are not available for `text` fields. If `actors` was | ||
a `text` field, you could still calculate the number of actors by extracting | ||
values from `_source` with `params['_source']['actors'].size()`. | ||
|
||
The following request returns the calculated day of week and the number of | ||
actors that appear in each play: | ||
|
||
```console | ||
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] */} | ||
|
||
```console-result | ||
{ | ||
"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"/] */} |