字段上下文
编辑字段上下文
编辑使用 Painless 脚本创建一个脚本字段,为查询结果中的每个文档返回自定义的值。
变量
-
params
(Map
,只读) - 作为查询的一部分传入的用户定义参数。
-
doc
(Map
,只读) - 包含指定文档的字段,其中每个字段都是一个值的
List
。 -
params['_source']
(Map
,只读) - 包含存储文档中现有字段的
Map
和List
结构中提取的 JSON。
返回值
-
Object
- 每个文档的自定义值。
API
可以使用标准的 Painless API 和 专用字段 API。
示例
要运行此示例,请首先按照上下文示例中的步骤进行操作。
然后,您可以使用这两个示例脚本来计算每个搜索命中的自定义信息,并将其输出到两个新字段。
第一个脚本获取 datetime
字段的 doc value,并调用 getDayOfWeekEnum
函数来确定对应的星期几。
doc['datetime'].value.getDayOfWeekEnum().getDisplayName(TextStyle.FULL, Locale.ROOT)
第二个脚本计算演员的数量。演员的姓名存储在 actors
字段中,作为一个关键词数组。
默认情况下,doc values 对于 |
以下请求返回计算出的星期几以及每个剧本中出现的演员数量
GET seats/_search { "size": 2, "query": { "match_all": {} }, "script_fields": { "day-of-week": { "script": { "source": "doc['datetime'].value.getDayOfWeekEnum().getDisplayName(TextStyle.FULL, Locale.ENGLISH)" } }, "number-of-actors": { "script": { "source": "doc['actors'].size()" } } } }
{ "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 ] } } ] } }