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

Року півтора тому зіткнувся з проблемою вибору клієнта до 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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.