Я создал модуль Play Framework, который будет запускать Elastic Search на Heroku, используя S3 для сохранения состояния. Нет необходимости в экземпляре EC2 - вы платите только за стоимость данных S3, которая намного меньше, в основном за транзакции ввода-вывода. Он использует шлюз ElasticSearch S3 (механизм персистентности).
Вы можете использовать его, либо расширив приложение Play для создания конкретных конечных точек для своих функций поиска, либо, если хотите, вы можете напрямую получить доступ к API-интерфейсу REST ElasticSearch (по умолчанию он предоставляет его по маршруту http://yourapp.com/es). Там это очень простая система аутентификации для ее защиты.
Единственным недостатком этой настройки является то, что динамометру может потребоваться некоторое время, чтобы раскрутиться. Таким образом, это не будет хорошо работать, если вы позволите динамометрическому устройству замедляться из-за неактивности - и вы можете получить штраф за передачу данных S3, если это часто случается и ваш индекс огромен. Плюс в том, что вы контролируете свои собственные данные, и это дешево дешево дешево. Еще одно предупреждение - вам нужно быть осторожным, чтобы не выходить за пределы памяти династии Героку. Тем не менее, у нас были функции автозаполнения полнотекстового поиска, работающие с несколькими индексами без проблем.
Возможно, вы сможете собрать аналогичный модуль в Rails, используя JRuby для взаимодействия с API-интерфейсом ElasticSearch Java. Мой основной вклад здесь заключался в том, чтобы выяснить, как запустить его в другом веб-фреймворке - поскольку Play также использует Netty, его было довольно легко внедрить. Тесты производительности по сравнению с кластером EC2 + Tire (гем Rails для ElasticSearch) показали, что подход Heroku / Play выполнял более быстрые поиски.
Проект находится здесь: https://github.com/carchrae/elastic-play - Я был бы рад помочь людям настроить его - он должен быть довольно безболезненным.