Script Fields - shuiyuebingdian/ElasticSearch GitHub Wiki

允许为每个匹配返回脚本评估(基于不同的字段),例如:

GET /_search
{
	"query" : {
		"match_all": {}
	},
	"script_fields" : {
		"test1" : {
			"script" : {
				"lang": "painless",
				"inline": "doc['my_field_name'].value * 2"
			}
		},
		"test2" : {
			"script" : {
				"lang": "painless",
				"inline": "doc['my_field_name'].value * factor",
				"params" : {
					"factor"  : 2.0
				}
			}
		}
	}
}

脚本字段可以在未存储的字段上工作(my_field_name在上述情况下),并允许返回要返回的自定义值(脚本的评估值)。

脚本字段还可以使用来访问实际_source文档并提取要从中返回的特定元素params['_source']。这是一个例子:

GET /_search
	{
		"query" : {
			"match_all": {}
		},
		"script_fields" : {
			"test1" : {
				"script" : "params['_source']['message']"
			}
		}
	}

注意_source此处的关键字以浏览类似json的模型。

理解之间的区别是很重要的 doc['my_field'].value和params['_source']['my_field']。第一个使用doc关键字,将导致将该字段的术语加载到内存中(缓存),这将导致执行速度更快,但会占用更多内存。另外,该doc[...]表示法仅允许使用简单的值字段(无法从中返回json对象),并且仅在未分析或基于单项的字段上有意义。但是,doc仍然建议使用using (如果可能的话)从文档中访问值,因为_source每次使用时都必须加载并解析它。使用_source非常慢。