Полнотекстовый поиск с помощью Rails

Я искал плагины / гемы для Rails. В большинстве статей Феррет (Lucene) сравнивается с Ультрасфинксом или, возможно, с " Мышащим сфинксом", но ни одна из них не говорит о SearchLogic. У кого-нибудь есть какие-либо подсказки относительно того, как этот сравнивается? Что вы используете и как это работает?

7 ответов

Решение
  • think_sphinx и sphinx работают прекрасно, никаких проблем с индексацией, запросами, установкой (5 или 6 установок, включая рабочий slicehost)

  • почему не все используют сфинкса, как, скажем, Craigslist? читайте здесь о его ограничениях (полтора года назад статьи. Разработчик sphinx, Aksyonoff, работает над этим, он внедряет функции, надежность и исправляет ошибки в удивительном темпе)

http://codemonkey.ravelry.com/2008/01/09/sphinx-for-search/

http://www.ibm.com/developerworks/opensource/library/os-php-apachesolr/

Сравнение полнотекстового поискового движка - Lucene, Sphinx, Postgresql, MySQL?

  • хорька: легкая установка, не запускается должным образом, очень медленная индексация (одна база данных mysql: sphinx: 3 секунды, ferret: 50 минут). Хорошо задокументированные проблемы (повреждение индекса) на серверах drb в рабочей среде под нагрузкой. Сказав это, я использую его в develometn, так как act-as_ferret вышел 3 года назад, и он мне хорошо послужил. Несоблюдение правил портера является преимуществом в некоторых контекстах.

  • Lucene and Solr - чемпион по общедоступным поискам среди горилл / маков и тяжеловесов. Команды выполнили впечатляющее количество новых функций в выпуске Solr 14:

  • действует как сольр: работает хорошо, когда кот или причал на месте, но иногда это боль. Форк AAS от mattmatt является основным форком, но проект относительно не поддерживается.

  • Как установить tomcat: у SOLR/lucene, несомненно, лучшая база знаний / поисковая система поддержки из всех программных пакетов, которые я когда-либо видел (думаю, я не удивлен), поле поиска здесь:

http://www.lucidimagination.com/

  • Sunspot новая рубиновая оболочка, основанная на solr-ruby. Выглядит многообещающе, но я не смог заставить его установить на OSX. Индексирует все объекты ruby, а не только базы данных через AR

  • Одна вещь, которая действительно поучительна, это установить 2 поисковых плагина, например, sphinx и SOLR, sphinx и ferret, и посмотреть, какие разные результаты они возвращают. Это так же просто, как @sphinx_results - @ferret_results


только что увидел этот пост и отзывы

http://zooie.wordpress.com/2009/07/06/a-comparison-of-open-source-search-engines-and-indexing-twitter/

http://www.jroller.com/otis/entry/open_source_search_engine_benchmark

http://www.flax.co.uk/blog/2009/07/07/xapian-compared/

Прежде всего, мой очевидный уклон: я создал и поддерживаю Thinking Sphinx.

Когда это случилось, я на самом деле видел, как Бен Джонсон (создатель SearchLogic), присутствовавший на рубине Нью-Йорка, встретился по этому поводу вчера вечером. SearchLogic предназначен только для SQL- поэтому, если вы не имеете дело с массивными таблицами и ранжирование по релевантности не требуется, тогда это может быть именно то, что вы ищете. Синтаксис тоже довольно чистый.

Однако, если вы хотите, чтобы весь анализ запросов обрабатывался не вашим собственным кодом, то Sphinx или Solr (я думаю, что Lucene под капотом), вероятно, сработают лучше.

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

http://railscasts.com/episodes/120-thinking-sphinx

Отличное введение, чтобы увидеть, насколько он гибок.

Я не использовал SearchLogic, но могу вам сказать, что Lucene - очень зрелый проект, который реализован на многих языках. Он быстрый и гибкий, а с API приятно работать. Это хорошая ставка.

Учитывая, что этот вопрос по-прежнему высоко оценивается в Google для полнотекстового поиска, я действительно хотел бы сказать, что Sunspot сегодня еще сильнее, если вы заинтересованы в добавлении возможностей полнотекстового поиска в свое приложение на Rails (и хотели бы, чтобы Solr отставал от него). ты за это). Вы можете проверить полное руководство по этому вопросу здесь.

И в то время как мы находимся в этом, другой претендент, который прибыл в область, является ElasticSearch, который стремится быть механизмом полнотекстового поиска в реальном времени, построенным на основе Lucene (но делающим вещи по-другому по сравнению с Solr). ElasticSearch включает в себя готовый шардинг и репликацию на несколько узлов, более быстрый поиск в реальном времени, "перколяторы", позволяющие вам получать уведомления, когда что-то, что соответствует вашим критериям, становится доступным, и оно движется очень быстро со многими другими функциями. С его помощью легко что-то построить, поскольку API очень прост и полностью основан на REST с использованием JSON в качестве формата. Можно сказать, что вам даже не нужен плагин для его использования.

Полнотекстовая индексация и MATCH() AGAINST().

Если вы просто хотите выполнить быстрый поиск по нескольким текстовым столбцам в своей таблице, вы можете просто использовать полнотекстовый индекс этих столбцов и использовать MATCH() AGAINST() в ваших запросах.

  1. Создайте полнотекстовый индекс в файле миграции:

    add_index :table, :column, type: :fulltext
    
  2. Запрос с использованием этого индекса:

    where( "MATCH( column ) AGAINST( ? )", term )
    

ElasticSearch и Searchkick

Если вы ищете полноценное решение для индексации поиска, которое позволяет вам искать любой столбец в любой из ваших записей, при этом сохраняя при этом молниеносную скорость, взгляните на ElasticSearch и Searchkick.

ElasticSearch - это система индексации и поиска.

Searchkick - это библиотека интеграции с Rails, которая упрощает индексацию ваших записей и поиск в них.

README Searchkick отлично справляется с объяснением того, как приступить к работе, и точно настроить вашу установку, но вот небольшой фрагмент:

  1. Установите и запустите ElasticSearch.

    brew install elasticsearch
    brew services start elasticsearch
    
  2. добавлять searchkick драгоценный камень в ваш набор:

    bundle add searchkick --strict
    

    В --strict опция просто указывает Bundler использовать точную версию в вашем Gemfile, что я настоятельно рекомендую.

  3. добавлять searchkick к модели, которую вы хотите проиндексировать:

    class MyModel < ApplicationRecord
      searchkick
    end
    
  4. Индексируйте свои записи.

    MyModel.reindex
    
  5. Найдите свой index.

    matching_records = MyModel.search( "term" )
    

Лично я не беспокоюсь об агностике баз данных для веб-приложений и очень рад, что полнотекстовый поиск в pg83. Преимущество в том случае, если и когда вы измените ваш каркас / язык, у вас все равно будет полнотекстовый поиск.

Для тех, кто ищет простой поисковый камень без каких-либо зависимостей, ознакомьтесь с acts_as_indexed

Другие вопросы по тегам