17

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

4

19 回答 19

16

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

UltraSphinx 和 Thinking Sphinx(最近)都具有超酷功能,考虑到对象的地理邻近性。

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

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

于 2008-09-16T15:31:47.677 回答
10

这个问题之前已经在这里问过更详细的答案。

于 2008-09-16T18:13:55.803 回答
5

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

他最近在Montreal on Rails 上介绍了该组合,并在他的博客上对如何使用acts_as_solr 进行了很好而全面的概述。

它显然也很好地支持了法语口音。

于 2008-09-16T15:50:28.427 回答
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。

于 2008-09-17T01:55:53.680 回答
4

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

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

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

于 2008-09-16T15:39:36.767 回答
1

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

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

效果很好。

于 2008-09-16T15:44:58.533 回答
1

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

与 sphinx 不同,您不必在添加新数据时重新索引所有记录。有 after_save 和 after_update 钩子可以将你的新记录插入到 ferret 数据库中。这对我来说是一大卖点。

当您必须对数据进行海量索引时,ferret 肯定比acts_as_sphinx 慢(3 倍)。我最终编写了自己的方法来重新索引模型,它的工作速度与 sphinx 一样快——它基本上是从数据库中预加载所有数据,而不是逐条记录来创建新索引。

ferret 文档对基础知识很有用,但是一旦您进行更复杂的搜索、排序和使用 dRb 服务器托管远程索引,它就会有点稀疏。话虽如此,它感觉比acts_as_sphinx成熟得多,尽管我对sphinx的经验有限。

于 2008-09-17T19:18:27.217 回答
1

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

因此,我选择了 Xapian,它对我来说效果很好。我研究过 2 个 Rails 插件:acts_as_xapian 和 xapian_fu。第一个会让你快速上手,但它似乎不再被维护了。我刚刚开始使用 xapian_fu。

于 2010-09-01T12:59:59.023 回答
1

如果有人仍然感兴趣,现在最新使用的是elasticsearch。有可用的宝石,例如轮胎弹性搜索轨道。它也像 Solr 一样基于 Lucene,基于 Java。Solr 现在实际上已与该项目集成...

于 2015-02-09T11:33:54.717 回答
0

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

于 2008-09-16T15:26:29.543 回答
0

我推荐思考狮身人面像。在我看来,这是最快的选择。

于 2008-09-16T15:27:49.697 回答
0

我用过 Ferret,它对我的​​目的很有效,但我没有评估其他选项。

于 2008-09-16T15:30:21.657 回答
0

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

于 2008-09-16T15:41:30.117 回答
0

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

于 2008-09-16T15:57:53.417 回答
0

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

于 2008-09-23T14:22:45.153 回答
0

我正在使用一个不同的选项,效果非常好。我正在使用 jruby 并直接与 lucene 交谈。

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

于 2009-01-13T17:34:58.567 回答
0

Thinking Sphinx 是一个比 Ultrasphinx 更好的替代品,后者似乎被抛弃了,但总的来说,Xapian 的引擎比 Sphinx 更强大,并且更容易实现实时搜索。

于 2009-01-15T05:32:42.550 回答
0

我推荐acts_as_ferret。但是,虽然困难的部分是让它在您的服务器中成功启动并运行,但一旦完成,您几乎没有任何问题,因为 ferret 服务器将作为单独的后台进程运行,以在每次有任何新更新时更新您的索引。此外,它在 mongrel 和 apache 中为我们工作得很好。

于 2009-08-29T17:35:34.850 回答
0

我也一直在寻找完美的解决方案。起初我选择了 Thinking Sphinx,效果很好。但是因为我打算在Heroku上托管我的 webapp ,所以唯一的选择是使用Solr。然而,最大的缺点是主要acts_as_solr gem 的开发似乎在2008 年5 月之后停止了。所以这对我来说太旧了。我刚刚发现Sunspot是一种先进的替代品,并且最近有更新,所以我要考虑这个。

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

于 2010-06-15T21:31:12.910 回答