Я начал работать над проектом, который требовал полнотекстового поиска в Ruby, поэтому, естественно, я начал с Solr + Sunspot, но не смог заставить его работать.Было трудно просто подключить их, а затем попытаться выяснить, правильно ли проиндексирован документ, выяснить путь к классам времени выполнения, чтобы я мог добавить дополнительные классы анализатора / токенизатора, отредактировать файл config.xml / schema.xml и т. Д. Четко выяснить numDocsсказал, что получил и проиндексировал их, но я не смог получить никаких результатов запроса.Я просто сдался через пару дней, это было своего рода адом конфигурации.
ElasticSearch + Tire был легким, чтобы его запустить и запустить, я заработал его через час.
Lucene - это просто поисковая библиотека Java, поэтому Solr был разработан как полнофункциональное поисковое приложение, но у Solr все еще есть ловушка типичного веб-приложения Java: слишком сложные XML-конфигурации, тяжелые схемы, ожидающие XML-документы для индексации, требующиеКонтейнер сервлетов Java (Jetty или Tomcat), который для меня просто становится слишком большим количеством точек отказа.
ElasticSearch также основан на Lucene, у него есть встроенный контейнер сервлетов, поэтому просто запускайте его как демон, используйте командуочень простой JSON + REST API, поэтому он отлично подходит для тестирования и более естественен для Ruby.Это без схемы, и он работал для меня даже без редактирования файла конфигурации.Все работало прекрасно.
Что мне действительно нужно, так это китайский поиск, и ElasticSearch уже упаковал SmartChineseAnalyzer Luecene в качестве плагина.Не уверен, насколько сложно будет настроить цепочку анализатора / токенизатора, если вам нужен такой уровень настройки.Документация по ElasticSearch и Tire является первоклассной.
Tire (библиотека Ruby для ElasticSearch)
https://github.com/karmi/tire
Вы можете попробовать демо, оно установит приложение rails searchapp, загрузитедвоичный файл ElasticSearch и запустите его, а затем автоматически запустите Webrick.
$ rails new searchapp -m https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb
В моей системе он жаловался на отсутствие движка Javascript (Rails 3.2 больше не включает в себя гемububaracer по умолчанию), поэтому мне пришлось:
$ wget https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb
$ nano rails-application-template.rb
добавить в файл gem 'therubyracer' (найдите gem 'tyre' и gem 'will_paginate'), затем ...
$ rails new searchapp -m rails-application-template.rb
Для разработки моего собственного приложения,Я только что загрузил тарбол ElasticSearch и запустил на переднем плане ключ -f (так что я могу легко остановить его с помощью Ctrl-C)
$ bin/elasticsearch -f
Вы можете установить плагин eleasticsearch-head, чтобы получить веб-администратораinterface
https://github.com/mobz/elasticsearch-head
Также кое-что, что я обнаружил: если у вас есть модели отношений «один ко многим», Tire не разрешит их для вас в результатах поиска, а просто выдастплоская коллекция.Ваши отношения has_many и own_to будут просто идентификаторами объектов в коллекции, а не полными объектами.