Какой наилучший вариант для поиска в Ruby on Rails?[закрыто]

StackOverflow https://stackoverflow.com/questions/73527

  •  09-06-2019
  •  | 
  •  

Вопрос

Существует несколько вариантов плагинов для встраивания поисковой системы в ваше приложение Ruby on Rails.Какой из них самый лучший?

Это было полезно?

Решение

Thinking Sphinx имеет более краткий синтаксис для определения того, какие поля и какие модели индексируются.

И UltraSphinx, и Thinking Sphinx (недавно появившиеся) имеют ультракрутую функцию, которая учитывает географическую близость объектов.

У UltraSphinx есть досадные проблемы с тем, как он загружает модели (он не загружает весь стек Rails, поэтому вы можете получить странные и трудно диагностируемые ошибки, которые обрабатываются путем добавления явных require заявления).

Мы используем Thinking Sphinx в новых проектах и UltraSphinx в проектах, использующих геоконтент.

Другие советы

Этот вопрос уже задавался ранее здесь с более подробными ответами.

Надежный вариант, которым пользуется один из моих друзей, - это Солр, поисковая система, использующая оригинальный Lucene на основе Java.Чтобы использовать его с Rails, есть, конечно, плагин acts_as, acts_as_solr ( действия_as_solr ).

Недавно он представил эту комбинацию на Монреаль на рельсах и дает хороший и подробный обзор как использовать acts_as_solr в своем блоге.

По-видимому, он также очень хорошо поддерживает французский акцент.

Прямо сейчас я прохожу именно через этот процесс, поэтому, хотя у меня нет реального опыта, я потратил много часов на изучение всех вариантов.Вот что я узнал на данный момент:

  • * Sphinx - хорошая репутация за скорость и функциональность, но Sphinx нужны целочисленные ключи, а моя модель использует GUID;ThinkingSphinx недавно объявила о поддержке GeoSpatial
  • Acts_As_Solr - рекомендован другом с популярным сайтом;первоначальные создатели прекратили работу над ним, и документацию трудно найти;требуется Java-сервлет
  • Acts_As_Ferret - выглядит простым в использовании, но много недоброжелателей, которые говорят, что он нестабилен
  • Двумя другими с ограниченной информацией являются Acts_As_Indexed и Acts_As_Searchable

У меня есть электронная таблица с моей попыткой документировать преимущества и недостатки всех из них.Если кому-то интересно посмотреть это и / или помочь мне исправить, просто свяжитесь со мной.Я опубликую это где-нибудь, как только буду уверен в точности.

Я бы порекомендовал попробовать UltraSphinx или Thinking Sphinx, если у вас есть обычные первичные ключи.Я собираюсь попробовать Acts_As_Xapian, основываясь на хорошей документации, наборе функций и том, насколько активным кажется проект.

Я использовал комбинацию Ferret / acts_as_ferret (устаревшее решение) только в клиентском проекте.Я настоятельно рекомендую ознакомиться с Другое сначала варианты.

aaf очень хрупок и может привести к полной остановке вашего приложения Rails, если вы допустите ошибку в конфигурации или по какой-либо причине обнаружите ошибку в aaf.

В таком случае, вместо того, чтобы просто отключить функцию поиска, любое действие контроллера, касающееся индексированной модели, приведет к полному сбою и вызовет исключение.Что такое "бааад", хмкай?

Я использую действия_ас_хапиана плагин.Я следовал этому руководству:

http://locomotivation.com/2008/07/23/simple-ruby-on-rails-full-text-search-using-xapian

Работает очень хорошо.

Я использую acts_as_ferret.Он прост в настройке и, как правило, быстр.Встроенная функция поиска активной записи весьма полезна:вы можете применить любые условия или присоединиться к другим моделям после того, как в ходе поиска будут найдены соответствующие записи.

В отличие от sphinx, вам не нужно переиндексировать ВСЕ ваши записи при добавлении новых данных.Существуют перехватчики after_save и after_update, которые вставят вашу новую запись в базу данных ferret.Для меня это был один из главных аргументов в пользу продажи.

Когда вам нужно массово индексировать свои данные, ferret определенно работает медленнее, чем acts_as_sphinx (в 3 раза).В итоге я написал свой собственный метод переиндексации моделей, который работает так же быстро, как sphinx - он в основном предварительно загружает все данные из базы данных вместо того, чтобы переходить запись за записью для создания нового индекса.

Документация ferret хороша для основы, но она немного скудна, когда вы приступаете к более сложному поиску, сортировке и использованию dRb-сервера для размещения удаленного индекса.Тем не менее, это гораздо более зрелый продукт, чем acts_as_sphinx, хотя у меня ограниченный опыт работы со sphinx.

Если вы используете услугу общего хостинга, такую как я (Bluehost), ваши возможности могут быть ограничены тем, что предлагает провайдер.В моем случае я не смог найти хороший и надежный способ запустить и поддерживать работу отдельного сервера, такого как Lucene или Solr.

Поэтому я выбрал Xapian, и у меня это хорошо получалось.Есть 2 плагина для rails, которые я исследовал:действия_as_xapian и xapian_fu.Первый поможет вам быстро начать работу, но, похоже, он больше не поддерживается.Я только начал работать с xapian_fu.

На случай, если кому-то все еще интересно, последняя вещь, которую можно использовать сейчас, - это эластичный поиск.Для этого доступны драгоценные камни, такие как шина или elasticsearch-направляющие.Он также основан на Lucene, как и Solr, на Java.Теперь Solr фактически интегрирован с этим проектом...

Я использовал Thinking Sphinx, и он кажется довольно хорошим, но у меня не было времени оценить все варианты.

Я рекомендую думать о Сфинксе.На мой взгляд, это самый быстрый вариант.

Я использовал Ferret, и он хорошо подходил для моих целей, но я не оценивал другие варианты.

Вариант, который я еще не пробовал, основан на C ++ Ксапиан

Мы используем http://hyperestraier.sourceforge.net/, который был передан по наследству.Я не изучал другие движки, но hyperestraier предоставляет все необходимые возможности.Однако настройка поискового индекса довольно сложна.Вероятно, доступны более простые варианты.

Это зависит от того, какую базу данных вы используете.Я бы рекомендовал использовать Solr, поскольку он предлагает множество приятных опций для нечеткого поиска и имеет отличный анализатор запросов.Недостатком является то, что для этого вам придется запустить отдельный процесс.Я также использовал Ferret, но обнаружил, что он менее стабилен с точки зрения многопоточного доступа к индексу.Я не пробовал Sphinx, потому что он работает только с MySQL и Postgres.

Я использую другой вариант, который был проработан на удивление хорошо.Я использую jruby и разговариваю напрямую с lucene.

В прошлом я использовал acts_as_solr и столкнулся с некоторыми проблемами.в основном он выполняет синхронный вызов для каждого сохранения AR.Это не так уж плохо, но в моей ситуации сохранение иногда вызывало много синхронных вызовов solr и иногда занимало больше времени, чем позволял mongrel, и я получал исключение тайм-аута mongrel (или что-то в этом роде)

Думающий Sphinx - лучшая альтернатива, чем Ultrasphinx, который кажется заброшенным, но, в целом, Xapian обладает более мощным движком, чем Sphinx, и проще для реализации поиска в реальном времени.

Я рекомендую acts_as_ferret.Но хотя самое сложное - запустить его успешно на вашем сервере, после завершения у вас вряд ли возникнут какие-либо проблемы, поскольку сервер ferret будет работать как отдельный фоновый процесс для обновления вашего индекса каждый раз, когда появляется какое-либо новое обновление.Кроме того, для нас он отлично работает в mongrel с apache.

Я тоже искал идеальное решение.Сначала я выбрал Thinking Sphinx, который отлично работал.Но поскольку я намерен разместить свое веб-приложение на Герой, единственный вариант - использовать Солр.Однако самым большим недостатком является то, что разработка основного acts_as_solr ( действия_as_solr ) похоже, gem прекратил свою деятельность после мая 2008 года.Так что, на мой вкус, это слишком старо.Я только что нашел Солнечное пятно в качестве продвинутой альтернативы и с последними обновлениями, так что это то, что я собираюсь рассмотреть.

Другой вариант, который предлагает Heroku, - это использовать размещенный индексный сервер на базе Solr с именем Websolr.Необходимый драгоценный камень websolr-acts_as_solr к счастью, он также очень современен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top