0.官方网站
1.默认的脚本语言是painless,运行用其他语言编写的脚本,通过参数lang指定
2.脚本例子如下
PUT my_index/_doc/1 { "my_field": 5 }
GET /my_index/_search
GET my_index/_search { "script_fields": { "my_doubled_field": { "script": { "lang": "expression", "source": "doc['my_field'] * multiplier", "params": { "multiplier": 2 } } } } }
原理:当Elasticsearch第一次运行新脚本时,它会编译它并将编译后的版本存储在缓存,编译会比较的耗时过程,通过参数的params的方式,只需要编译一次,而使用硬编码的方式每次运行都会进行编译,例如上例的 "source": "doc['my_field'] * 2" 。默认情况下,每分钟最多编译15个内联脚本。可以通过设置script.max_compilations_rate来动态更改此设置。
3.将脚本存放_scripts里,通过id调用
定义脚本
POST _scripts/calculate-score { "script": { "lang": "painless", "source": "_score * 2 + params.my_modifier" } }
获取脚本
GET _scripts/calculate-score
使用脚本
GET my_index/_search { "script_fields": { "my_doubled_field": { "script": { "id": "calculate-score", "params": { "my_modifier": 2 } } } } }
删除脚本
DELETE _scripts/calculate-score
4.脚本的参数:
script.cache.expire:默认脚本不基于时间过期
script.cache.max_size:默认的脚本缓存大小100
script.max_size_in_bytes:默认的脚本的大小65535