Elastics: простой ElasticSearch-клиент для Ruby со всем необходимым

в 10:28, , рубрики: elasticsearch, rails, ruby, ruby on rails

Года полтора назад столкнулся с проблемой выбора клиента к ElasticSearch для node.js. Тогда нашлось несколько проектов, но все были либо слишком усложненные, либо написаны абы как. Хотя казалось: все что нужно — это обертка вокруг http запроса с JSON.encode/decode, обработкой ошибок и парой хэлперов. Тогда для ноды я быстро написал небольшой модуль, который оказался очень удобным.

Недавно надо было прикрутить ES к приложению на рельсах. Часть клиентов для Ruby уже давно не поддерживается, другие слишком усложнены. При этом многие клиенты не имеют механизма управления алиасами, хотя для ES это очень важный функционал.

Я решил написать минималистичный гем, взяв за основу модуль для node.js и расширив его функционал так, чтобы были все самые необходимые инструменты для разработки, деплоя и управления. Вот что получилось.

Минималистичное API

У ES хорошая документация и некоторые методы имеют много настроек. В elastics нет хэлпера для всех возможных методов. Основной метод — Client#request, позволяющий выполнить любой запрос. Есть хэлперы для http-методов и некоторых простых запросов. С таким подходом никогда не будет ситуации, что elastics не поддерживает функции новых/старых версий.
DSL для запросов тоже нет. По-моему, он только мешает и затягивает разработку (чтение документации, исходников, необходимость переводить примеры запросов из документации ES к новому DSL).

Интеграция с ActiveRecord

С возможностью выбора index-per-application/index-per-model и CRUD методами. Поддержку других ORM добавить не составит труда.

Управление индексами и маппингами без простоя

Elastics хранит настройки алиасов в ES, никаких сторонних хранилищ не требуется. Для конфликтующей миграции можно создать новый индекс, запустить приложение, работающее с ним, загрузить в него данные, а потом обновить алиасы (для этого есть таска). Разные индексы никак не связаны между собой: если нужно обновить алиасы только для одного, остальные можно не переиндексировать.

Rake и Capistrano таски

для миграций и индексирования моделей.

AutoRefresh режим для тестирования

В этом режиме после каждого запроса, изменяющего состояние, выполняется refresh-запрос на том же индексе.

Elastics работает с рельсами и без них. Код, примеры и более подробное описание можно посмотреть на github.

Автор: printercu

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js