Как стать автором
Обновить

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

Время на прочтение 2 мин
Количество просмотров 6.7K
Года полтора назад столкнулся с проблемой выбора клиента к 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.
Теги:
Хабы:
+6
Комментарии 13
Комментарии Комментарии 13

Публикации

Истории

Работа

Программист Ruby
15 вакансий
Ruby on Rails
17 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн