如何在Ruby on Rails中进行全文搜索?

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

有几种选择,每种都有不同的优点和缺点。 如果您想添加全文搜索,那么谨慎地进行一些调查并尝试一下,看看它在您的环境中对您有多好。

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

acts_as_tsearch为最新版本的PostgreSQL提供了类似内置function的包装器

对于其他数据库,您必须使用其他软件。

Lucene是一个用Java编写的流行搜索提供程序。 您可以使用acts_as_solr通过其搜索服务器Solr with Rails使用Lucene。

如果你不想使用Java,那么有一个名为Ferret的Lucene到Ruby的端口。 使用acts_as_ferret插件添加对Rails的支持。

Xapian是另一个不错的选择,并且使用acts_as_xapian插件在Rails中受支持。

最后,我首选的是使用Ultrasphinx插件的Sphinx 。 它非常快,并且有很多关于如何索引和搜索数据库的选项,但不再被主动维护。

Sphinx的另一个插件是Thinking Sphinx ,它有很多积极的反馈 。 使用Thinking Sphinx比使用Ultrasphinx更容易。 我建议调查两个插件,以确定哪个更适合您的项目。

我可以推荐Sphinx。 Ryan Bates使用Thinking Sphinx插件创建全文搜索解决方案。

你可以使用Ferret(用Ruby编写的Lucene)。 它使用acts_as_ferret mixin与Rails无缝集成。 看看“ 如何将雪貂与Rails整合 ”。 另一种选择是Sphinx 。

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

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

仅供将来参考:Ultra Sphinx不再维护。 思考狮身人面像是它的替代品。 虽然它目前缺少一些function,例如Ultra sphinx所具有的function,但它在其他function中弥补了它。

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