使用Rails进行全文搜索

时间:2009-07-15 15:52:46

标签: ruby-on-rails full-text-search lucene sphinx searchlogic

我一直在研究为Rails搜索插件/宝石。大多数文章都比较了Ferret(Lucene)和Ultrasphinx,或者可能是Thinking Sphinx,但没有人谈论SearchLogic。有没有人有任何关于这个比较的线索?你用了什么,它的表现如何?

8 个答案:

答案 0 :(得分:27)

  • thinking_sphinx和sphinx工作得很漂亮,没有索引,查询,安装问题(5或6次安装,包括生产slicehost)

  • 为什么不是每个人都使用狮身人面像,比如说craigslist?在这里阅读它的局限性(一年半的旧文章。狮身人面像开发人员Aksyonoff正在研究这些,他正在提供功能和可靠性,并以惊人的速度消除错误)

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

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

Comparison of full text search engine - Lucene, Sphinx, Postgresql, MySQL?

  • 雪貂:安装简单,干不正确,索引速度很慢(一个mysql db:sphinx:3秒,雪貂:50分钟)。在负载下生产中的drb服务器中记录良好的问题(索引损​​坏)。话虽如此,我已经在develometn中使用它,因为3年前出现了act-as_ferret,它对我有好处。在某些情况下,不遵守搬运工阻止是一种优势。

  • Lucene和Solr是开源搜索的大猩猩/马克卡车/重量级冠军。这些团队在solr 14 release:

  • 中进行了大量新功能
  • act-as-solr:一旦tomcat或码头到位,效果很好,但有时候会很痛苦。 A-A-S fork by mattmatt是主要的分支,但项目相对没有维护。

  • 重新安装tomcat:SOLR / lucene毫无疑问是我见过的任何软件包的最佳知识库/支持搜索引擎(我想我并不感到惊讶),这里的搜索框:

http://www.lucidimagination.com/

  • Sunspot the new红宝石包装,以solr-ruby为基础。看起来很有希望,但我无法在OSX上安装它。索引所有ruby对象,而不仅仅是通过AR

  • 的数据库
  • 一件真正有用的事情是安装2个搜索插件,例如狮身人面像和SOLR,狮身人面像和雪貂,看看他们返回的不同结果。它就像@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/

答案 1 :(得分:18)

首先,我明显的偏见:我创造并维护了思维斯芬克斯。

事实上,我实际上看到Ben Johnson(SearchLogic的创建者)昨晚出现在纽约红宝石会议上。 SearchLogic仅限SQL - 因此,如果您不处理大量表,并且不需要相关性排名,那么它可能正是您正在寻找的。语法也很干净。

但是,如果您希望所有查询智能都由您自己的代码处理,那么Sphinx或Solr(我认为是Lucene)可能会更好地解决问题。

答案 2 :(得分:5)

SearchLogic是一个很好的插件,但实际上是为了让您的搜索代码更具可读性,它不提供Sphinx所做的自动索引。我没有使用过Ferret,但是Sphinx非常强大。

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

很好的介绍,看看它有多灵活。

答案 3 :(得分:3)

我没有使用过SearchLogic,但我可以告诉你,Lucene是一个非常成熟的项目,它有多种语言的实现。它快速而灵活,API很有趣。这是一个不错的选择。

答案 4 :(得分:3)

鉴于此问题仍然在google上进行全文搜索排名很高,如果您有兴趣在Rails应用程序中添加全文搜索功能,我真的想说今天Sunspot更强大(并希望Solr支持你。)您可以查看有关此here的完整教程。

虽然我们正在努力,另一位已经进入该领域的竞争者是ElasticSearch,其目的是成为一个建立在Lucene之上的实时全文搜索引擎(但与Solr的)。 ElasticSearch包括开箱即用的分片和复制到多个节点,更快的实时搜索,“过滤器”,允许您在符合条件的东西变得可用时接收通知,并且它可以通过更多其他功能快速移动。在它之上构建一些东西很容易,因为API很简单,完全基于使用JSON作为格式的REST。有人可能会说你甚至不需要一个插件来使用它。

答案 5 :(得分:1)

就个人而言,我不打扰网络应用程序的数据库不可知,并且非常高兴使用pg83中的全文搜索。如果您更改框架/语言,则可以获得全文搜索。

答案 6 :(得分:0)

对于任何寻找没有任何依赖关系的简单搜索gem的人,请查看acts_as_indexed

答案 7 :(得分:0)

全文索引和MATCH() AGAINST()

如果您只是想对表中的几个文本列进行快速搜索,则可以简单地使用这些列的全文索引,并在查询中使用MATCH() AGAINST()

  1. 在迁移文件中创建全文索引:

    add_index :table, :column, type: :fulltext
    
  2. 使用该索引进行查询:

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

ElasticSearchSearchkick

如果您正在寻找一种功能强大的搜索索引解决方案,该解决方案可让您在快速查询的同时搜索任何记录中的任何列,请查看ElasticSearchSearchkick

ElasticSearch是索引和搜索引擎。

Searchkick是带有Rails的集成库,它使索引记录和搜索变得非常容易。

Searchkick's README在解释如何启动和运行以及微调您的设置方面做得非常出色,但这是一个小片段:

  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. 搜索索引。

    matching_records = MyModel.search( "term" )