LoginSignup
8
8

More than 5 years have passed since last update.

Elasticsearchのpainless scriptをElasticsearchに保存する。

Posted at

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単独で管理できるようになります。

本家マニュアル
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/modules-scripting-using.html#modules-scripting-stored-scripts

あとは、保存したscriptの一覧取得が欲しいところですが、バージョン5.5では、対応するapiはなさそうです。。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8