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

Вы можете использовать Collectors.groupingBy() и написать пользовательские Collector:

<T> Map<String, List<T>> getUserPerCompany(final Function<User, T> converter) {
    return getUserStream().collect(
            Collectors.groupingBy(
                    c -> c.getName(),
                    Collector.of(
                            ArrayList::new,                  //init accumulator
                            (list, c)-> c.getUsers()         //processing each element
                                         .stream()
                                         .map(converter)
                                         .forEach(list::add),
                            (result1, result2) -> {          //confluence 2 accumulators 
                                result1.addAll(result2);     //in parallel execution
                                return result1;
                            }
                    )
            )
    ); 
}
17
задан 4 revs 16 September 2008 в 16:00
поделиться

18 ответов

У думающего Сфинкса есть более краткий синтаксис для определения, какие поля и какие модели индексируются.

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

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

Мы используем Думающего Сфинкса на новых проектах и UltraSphinx на проектах, которые используют гео-содержание.

16
ответ дан 30 November 2019 в 11:08
поделиться

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

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

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

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

5
ответ дан 30 November 2019 в 11:08
поделиться

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

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

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

4
ответ дан 30 November 2019 в 11:08
поделиться

Твердая опция, используемая одним из моих друзей, Solr, поисковая система с помощью исходного основанного на Java Lucene. Для использования его с направляющими, существует, конечно, acts_as плагин, acts_as_solr.

Он недавно представил комбинацию в Монреаль на направляющих и дает хороший и полный обзор , как использовать acts_as_solr на его блоге .

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

5
ответ дан 30 November 2019 в 11:08
поделиться

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

10
ответ дан 30 November 2019 в 11:08
поделиться

Я использовал Думающего Сфинкса, и это кажется довольно хорошим, но у меня не было времени для оценки всех опций.

0
ответ дан 30 November 2019 в 11:08
поделиться

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

0
ответ дан 30 November 2019 в 11:08
поделиться

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

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

0
ответ дан 30 November 2019 в 11:08
поделиться

Это зависит, на какой базе данных Вы используете. Я рекомендовал бы использовать Solr, поскольку он предлагает много хороших опций для нечеткого поиска и имеет большой анализатор запроса. Оборотная сторона - Вы, должны выполнить отдельный процесс для него. Я использовал Хорька также, но нашел, что это менее стабильно с точки зрения многопоточного доступа к индексу. Я не попробовал Сфинкса, потому что он только работает с MySQL и Пост-ГРЭС.

0
ответ дан 30 November 2019 в 11:08
поделиться

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

0
ответ дан 30 November 2019 в 11:08
поделиться

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

0
ответ дан 30 November 2019 в 11:08
поделиться

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

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

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

документация хорька хороша для основ, но это немного редко, после того как Вы входите в более сложные поиски, виды и использование dRb сервера для хостинга удаленного индекса. Однако это чувствует намного более сформировавшийся продукт, чем acts_as_sphinx, хотя я ограничил опыт со сфинксом.

1
ответ дан 30 November 2019 в 11:08
поделиться

Опцией, которую я не попробовал, является C++, базирующийся Xapian

0
ответ дан 30 November 2019 в 11:08
поделиться

Я рекомендую Думать Сфинкс. Это - самая быстрая опция, по-моему.

0
ответ дан 30 November 2019 в 11:08
поделиться

Я использую плагин acts_as_xapian. Я следовал этому учебному руководству:

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

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

1
ответ дан 30 November 2019 в 11:08
поделиться

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

0
ответ дан 30 November 2019 в 11:08
поделиться

Я тоже искал идеальное решение. Сначала я выбрал Thinking Sphinx, который отлично работал. Но поскольку я намерен разместить свое веб-приложение на Heroku , единственный вариант - использовать Solr . Однако самым большим недостатком является то, что разработка основного гема plays_as_solr , похоже, была остановлена ​​после мая 2008 года. Так что, на мой вкус, это уже слишком старомодно. Я только что нашел Sunspot в качестве продвинутой альтернативы и с недавними обновлениями, так что я собираюсь рассмотреть этот вариант.

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

0
ответ дан 30 November 2019 в 11:08
поделиться

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

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

1
ответ дан 30 November 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: