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

有帮助吗?

解决方案

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

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

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

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

其他提示

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

我的一位朋友使用的一个可靠的选择是 索尔, ,一个使用原始基于Java的Lucene的搜索引擎。要将其与 Rails 一起使用,当然有一个acts_as 插件, 行为作为_solr.

他最近在 蒙特利尔铁路 并给出了一个很好而全面的概述 如何在他的博客上使用acts_as_solr.

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

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

  • *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。

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

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

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

我用 act_as_xapian 插入。我按照这个教程进行操作:

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

效果很好。

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

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

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

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

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

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

如果有人仍然感兴趣,现在最新使用的是 弹性搜索. 。有可用的宝石,例如 或者 弹性搜索Rails. 。它也像Solr一样基于Lucene,基于Java。Solr 现在实际上已经与这个项目集成了......

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

我推荐思考狮身人面像。我认为这是最快的选择。

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

我还没有尝试过的一个选项是基于 C++ 夏皮安

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

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

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

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

认为Sphinx是比Ultrasphinx更好的选择,Ultrasphinx似乎被放弃了,但总的来说,Xapian拥有比Sphinx更强大的引擎,并且更容易实现实时搜索。

我推荐acts_as_ferret。但是,尽管最困难的部分是在您的服务器中成功启动并运行它,但一旦完成,您几乎不会遇到任何问题,因为 ferret 服务器将作为单独的后台进程运行,以在每次有任何新更新时更新您的索引。另外,它在与 apache 的混合中对我们来说工作得很好。

我也一直在寻找完美的解决方案。一开始我选择了Thinking Sphinx,效果很好。但由于我打算将我的网络应用程序托管在 赫罗库, ,唯一的选择是使用 索尔. 。然而,最大的缺点是主要的开发 行为作为_solr gem似乎在2008年5月之后就停止了。所以这对我来说太旧了。我刚刚发现 太阳黑子 作为一种高级替代方案并且具有最近的更新,所以这是我要考虑的一个。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top