我想在 Ruby on Rails 应用程序中对数据进行全文搜索。存在哪些选择?

有帮助吗?

解决方案

有多种选项可供选择,每种选项都有不同的优点和缺点。如果您想添加全文搜索,明智的做法是对每个搜索进行一点研究并尝试一下,看看它在您的环境中是否适合您。

MySQL 内置了对全文搜索的支持。它具有在线支持,这意味着当新记录添加到数据库时,它们会自动索引并在搜索结果中可用。这 文档 有更多详细信息。

acts_as_tsearch 为最新版本的类似内置功能提供了一个包装器 PostgreSQL

对于其他数据库,您将不得不使用其他软件。

卢塞恩 是一个用 Java 编写的流行搜索提供程序。您可以通过 Lucene 的搜索服务器来使用 Lucene 索尔 与 Rails 使用 acts_as_solr.

如果您不想使用 Java,可以使用 Lucene 到 Ruby 的端口,称为 雪貂. 。使用以下命令添加对 Rails 的支持 acts_as_ferret 插入。

夏皮安 是另一个不错的选择,并且在 Rails 中得到支持,使用 acts_as_xapian 插入。

最后,我的首选是 狮身人面像 使用 超狮身人面像 插入。它速度非常快,并且有很多关于如何索引和搜索数据库的选项,但不再积极维护。

Sphinx 的另一个插件是 思考狮身人面像 其中有很多积极的一面 反馈. 。Thinking Sphinx 比 Ultrasphinx 更容易上手。我建议研究这两个插件,以确定哪个更适合您的项目。

其他提示

我可以推荐斯芬克斯。瑞恩·贝茨有一个伟大的 截屏视频 关于使用 Thinking Sphinx 插件创建全文搜索解决方案。

您可以使用 Ferret(这是用 Ruby 编写的 Lucene)。它使用acts_as_ferret mixin 与Rails 无缝集成。看一眼 ”如何将 Ferret 与 Rail 集成”。另一种选择是 狮身人面像.

我一直在编译一个 其他问题中各种 Ruby on Rails 搜索选项的列表. 。我不确定如何或是否合并我们的问题。

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

只是供将来参考的注释:不再维护 Ultra Sphinx。思考狮身人面像是它的替代品。虽然目前它还缺少Ultra sphinx所具有的摘录等几个功能,但它在其他功能上弥补了这一点。

我会推荐acts_as_ferret,因为我在工作中将它用于Scrumpad 项目。索引可以作为一个单独的过程来完成,这确保在重新索引时我们仍然可以使用我们的应用程序。这可以减少网站的停机时间。而且搜索速度也快得多。您可以一次搜索多个模型,并按您喜欢的字段对结果进行排序。

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