Скрипты (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.


Комментарии