在Ruby on Rails中搜索的最佳选择是什么?

时间:2008-09-16 15:24:19

标签: ruby-on-rails ruby search

有几个插件选项可用于在Ruby on Rails应用程序中构建搜索引擎。哪一种最好?

19 个答案:

答案 0 :(得分:16)

思考Sphinx有更简洁的语法来定义哪些字段和哪些模型被编入索引。

UltraSphinx和Thinking Sphinx(最近)都具有超酷的功能,可以考虑物体的地理位置。

UltraSphinx在加载模型时遇到了令人烦恼的问题(它不会加载整个Rails堆栈,因此您可能会出现奇怪且难以诊断的错误,这些错误通过添加显式require语句来处理)。

我们在新项目上使用Thinking Sphinx,在使用地理内容的项目上使用UltraSphinx。

答案 1 :(得分:10)

这个问题之前曾被here提出更详细的答案。

答案 2 :(得分:5)

我现在正在经历这个过程,所以虽然我没有实际经验,但我花了很多时间研究所有选项。这是我到目前为止所学到的:

  • * Sphinx - 速度和功能的良好声誉,但Sphinx需要整数键,我的模型使用GUID; ThinkingSphinx最近宣布支持GeoSpatial
  • Acts_As_Solr - 由拥有高容量网站的朋友推荐;原始创作者已停止工作,文档很难找到;需要Java servlet
  • Acts_As_Ferret - 看起来很容易使用,但很多说它不稳定的批评者
  • 另外两个信息有限的人是Acts_As_Indexed和Acts_As_Searchable

我有一张电子表格,试图记录所有这些的优点和缺点。如果有人有兴趣看到它和/或帮我纠正它,请联系我。一旦我知道它的准确性,我就会把它发布到某个地方。

如果您有正常的主键,我的建议是尝试使用UltraSphinx或Thinking Sphinx。我将根据良好的文档,功能集以及项目的活跃程度来尝试Acts_As_Xapian。

答案 3 :(得分:5)

我的一个朋友使用的一个可靠选项是Solr,这是一个使用原始基于Java的Lucene的搜索引擎。要将它与Rails一起使用,当然还有一个acts_as插件,acts_as_solr

他最近在Montreal on Rails展示了这个组合,并对how to use acts_as_solr on his blog进行了全面而全面的概述。

它显然也非常支持法语口音。

答案 4 :(得分:4)

我只在客户端项目中使用了Ferret / acts_as_ferret组合(遗留决策)。我强烈建议您首先查看其他选项。

aaf非常脆弱,如果您在配置中出错或者由于某种原因您遇到了aaf中的错误,可能会使您的Rails应用程序戛然而止。

在这种情况下,触摸索引模型的任何控制器操作都将完全失败并引发异常,而不是简单地使搜索功能崩溃。 baaad,hmkay是哪个?

答案 5 :(得分:1)

如果有人仍然感兴趣,现在使用的最新内容是 elasticsearch 。有可用的宝石,如轮胎 elasticsearch-rails 。它也基于Lucene,就像基于Java的Solr一样。 Solr现在实际上已经与这个项目集成......

答案 6 :(得分:1)

如果您使用像我这样的共享托管服务(Bluehost),您的选项可能仅限于提供商提供的内容。就我而言,我找不到一个好的,可靠的方法来启动并保持一个单独的服务器运行,例如Lucene或Solr。

因此,我选择了Xapian并且它对我来说效果很好。我研究过有两个用于rails的插件:acts_as_xapian和xapian_fu。 第一个会让你快速前进,但它似乎不再维持。我刚刚开始使用xapian_fu。

答案 7 :(得分:1)

我正在使用acts_as_ferret。它配置简单,速度快。内置的活动记录查找功能非常有用:您可以在搜索找到匹配的记录后应用任何条件或加入其他模型。

与sphinx不同,您在添加新数据时无需重新索引所有记录。有post_save和after_update挂钩会将你的新记录插入到ferret db中。这对我来说是最大的卖点之一。

当你必须对数据进行质量索引时,雪貂肯定比acts_as_sphinx要慢(减少3倍)。我最终编写了自己的方法来重新索引模型,这些模型的工作速度与sphinx一样快 - 它基本上预装了DB中的所有数据,而不是按记录记录来创建新索引。

ferret文档对于基础知识是有用的,但是一旦你进入更复杂的搜索,排序并使用dRb服务器来托管远程索引,它就会有点稀疏。话虽如此,感觉比acts_as_sphinx更成熟,尽管我对狮身人面像的经验有限。

答案 8 :(得分:1)

我使用 acts_as_xapian 插件。我遵循了这个教程:

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

效果很好。

答案 9 :(得分:0)

我们正在使用继承的http://hyperestraier.sourceforge.net/。没有看过其他引擎,但hyperestraier提供了必要的所有钩子。但是设置搜索索引很复杂。可能更容易的选择。

答案 10 :(得分:0)

我没有尝试的选项是基于C ++的Xapian

答案 11 :(得分:0)

我使用过Ferret并且它的用途很好,但我没有评估其他选项。

答案 12 :(得分:0)

这取决于您使用的数据库。我建议使用Solr,因为它为模糊搜索提供了很多不错的选项,并且有一个很棒的查询解析器。缺点是你必须为它运行一个单独的过程。我也使用过Ferret,但发现它在多线程访问索引方面不太稳定。我没有尝试过Sphinx,因为它只适用于MySQL和Postgres。

答案 13 :(得分:0)

我正在使用一个非常好的选择。我正在使用jruby并直接与lucene交谈。

我过去曾使用过acts_as_solr并遇到了一些问题。主要是为每个AR保存进行同步调用。这不是太糟糕,但在我的情况下,保存有时会导致许多同步调用solr,并且偶尔需要比mongrel允许更长的时间,并且我会得到一个mongrel超时异常(或类似的东西)

答案 14 :(得分:0)

思考Sphinx是一个比Ultrasphinx更好的选择,它似乎已被放弃,但总的来说,Xapian的引擎比Sphinx更强大,更容易实现实时搜索。

答案 15 :(得分:0)

我推荐acts_as_ferret。但是,虽然困难的部分是在服务器中成功运行,但一旦完成,您几乎没有任何问题,因为每次有任何新的更新时,ferret服务器将作为单独的后台进程运行以更新索引。此外,它为我们带来了与阿普尔的混合工作。

答案 16 :(得分:0)

我一直在寻找完美的解决方案。起初,我选择了Thinking Sphinx,它运作良好。但由于我打算在Heroku上托管我的网络应用,唯一的选择是使用Solr。然而,最大的缺点是主要acts_as_solr宝石的开发似乎已经在2008年5月之后停止了。所以这对我来说太老了。我刚刚发现Sunspot作为一种高级替代方案,并且有最近的更新,所以这是我要考虑的。

Heroku提供的另一个选择是使用基于Solr的托管索引服务器,名为Websolr。所需的宝石websolr-acts_as_solr也很幸运,是最新的。

答案 17 :(得分:0)

我推荐Thinking Sphinx。在我看来,这是最快的选择。

答案 18 :(得分:0)

我使用过Thinking Sphinx,看起来还不错,但我没有时间评估所有选项。