AWSのAmazon Elasticsearch Serviceでは、ファイルに保存したscriptの呼び出し等対応していませんでしたが、version5.5以上では、scriptのstoreに対応しています。これにより毎回queryに記載していたscriptを簡素化して呼び出すことができます。
この機能を使って、Elasticsearchの painless script をElasticsearch側に保存し、検索時には、idで呼び出せるようにします。
保存するscriptは、以前記載した Elasticsearchに登録した生年月日から現在の年齢を算出する. を使います。
scriptの保存
scriptの保存は、 _script/{id}
で行います。
POST _scripts/script-age
{
"script": {
"lang": "painless",
"code": "Date n = new Date(); Date b = new Date(doc['birthday'].value); DateFormat f = new SimpleDateFormat('yyyy-MM-dd'); return Period.between(LocalDate.parse(f.format(b)), LocalDate.parse(f.format(n))).getYears();"
}
}
_script
の後ろに指定した値が id
として扱われる為、 id
の管理は、利用する側で行う必要があります。
保存したscriptを使った検索
保存したscriptを利用する場合は、 scriptで stored
: id
を指定します。
GET {index}/{type}/_search
{
"script_fields": {
"age": {
"script": {
"stored": "script-age"
}
}
}
}
scriptの参照
保存した script を参照する場合は、 GET
で _script
を呼び出します。
GET _scripts/script-age
scriptの削除
script を削除する場合は、 DELETE
で _script
を呼び出します。
DELETE _scripts/script-age
queryに直接記載されたscriptを分離することで、search queryの記述を簡素でき、script単独で管理できるようになります。
あとは、保存したscriptの一覧取得が欲しいところですが、バージョン5.5では、対応するapiはなさそうです。。