Скрипты (Scripting)
Рано или поздно вы придёте к тому что захочется использовать что-то специфическое чего нет в стандартных processors которые предоставляет Elasticsearch
. Для этого Elasticsearch
предоставляет возможность написания своих собственных скриптов, которые вы потом можете вызывать, используя script processor
, который использует Painless programming language .
Painless programming language
Painless - это язык сценариев (Scripting)
, разработанный специально для использования в Elasticsearch
. Он довольно быстр и безопасен. Этот язык имеет синтаксис, подобный Groovy
, и поддерживает все типы данных Java
с подмножеством Java API
.
Для просмотра какие методы и классы вы можете использовать в Painless пройдите по ссылке.
Использование Painless
Для начала нужно создать наш скрипт, который вы сможете использовать после в processors. Выполнятся этот скрипт будет в pipeline.
Для примера напишем скрипт, который поменяет значение поля category
.
- Создаём документ
PUT my-index-01/_doc/1 { "title":"Introducing beta releases: Elasticsearch and My-App!", "category": "Lite" }
- Создаём новый
pipeline
со скриптомPUT _ingest/pipeline/change_category { "processors": [ { "script": { "source": "ctx['category'] = 'Blog'" } } ] }
- Делаем переиндексацию и проверяем документ в новом index
POST _reindex { "source":{ "index": ["my-index-01"] }, "dest":{ "index":"my-index-02", "pipeline": "change_category", "op_type":"create" } } GET my-index-02/_search
Вы также можете использовать скрипт в переиндексации, не создавая его заранее. Просто прописываете его внутри _reindex
.
POST _reindex
{
"source":{
"index": "my-index-01"
},
"dest":{
"index":"my-index-02"
},
"script": {
"source": "ctx['category'] = 'Blog'"
}
}
Кэширование скриптов
Все скрипты хранятся в cache. Как только Elasticsearch
понимает, что скрипт создан он компилирует его и кладёт в cache.
По умолчанию в cache хранится ограниченное количество таких скриптов, значение по умолчанию - 100 скриптов. Вы можете менять это количество используя script.cache.max_size
.
Также вы можете установить время жизни скрипта в cache используя параметр script.cache.expire
.
По умолчанию Elasticsearch
не даст скомпилировать больше 75 скриптов за промежуток времени в 5 минут. Вы также можете исправить это используя script.max_compilations_rate
.
В итоге
- Painless это язык сценариев, разработанный специально для использования в
Elasticsearch
- Скрипты могут быть встроенными (пример переиндексации) или храниться в кластере
- Когда
Elasticsearch
впервые видит новый скрипт, он компилирует его и сохраняет скомпилированную версию в cache.
Комментарии