如何在Ruby on Rails中进行全文搜索?
我想在Ruby on Rails应用程序中对数据进行全文搜索。存在哪些选择?
解决方案
回答
我们可以使用Ferret(这是用Ruby编写的Lucene)。它通过使用acts_as_ferret mixin与Rails无缝集成。看一看"如何将雪貂与Rails集成"。另一种方法是狮身人面像。
回答
我可以推荐Sphinx。 Ryan Bates在使用Thinking Sphinx插件创建全文搜索解决方案方面进行了精彩的播客。
回答
有几种选择,每种选择都有各自的长处和短处。如果我们想添加全文本搜索,请谨慎地进行一些调查,然后尝试一下以了解它在环境中的效果如何,这是明智的选择。
MySQL内置了对全文搜索的支持。它具有在线支持,这意味着当新记录添加到数据库时,它们会自动建立索引并在搜索结果中可用。该文档具有更多详细信息。
" acts_as_tsearch"为PostgreSQL的最新版本提供了类似内置功能的包装器
对于其他数据库,我们将必须使用其他软件。
Lucene是使用Java编写的流行搜索提供程序。我们可以使用" acts_as_solr"在其带有Rails的搜索服务器Solr中使用Lucene。
如果我们不想使用Java,那么Lucene到Ruby的一个移植就是Ferret。使用acts_as_ferret
插件添加了对Rails的支持。
Xapian是另一个不错的选择,并且使用acts_as_xapian
插件在Rails中受支持。
最后,我的首选是使用Ultrasphinx插件的Sphinx。它的速度非常快,并且在如何建立索引和搜索数据库方面有很多选择,但是不再得到积极维护。
Sphinx的另一个插件是Thought Sphinx,它具有很多积极的反馈。开始使用Think Sphinx比使用Ultrasphinx容易一些。我建议调查这两个插件,以确定哪个更适合项目。
回答
我一直在编译另一个问题中各种Ruby on Rails搜索选项的列表。我不确定如何或者是否结合我们的问题。
回答
这取决于我们使用的数据库。我建议使用Solr,因为它提供了很多不错的选择。缺点是我们必须为此运行一个单独的过程。我也使用过Ferret,但是发现它在对索引的多线程访问方面不太稳定。我没有尝试过Sphinx,因为它仅适用于MySQL和Postgres。
回答
仅作说明,以供将来参考:Ultra Sphinx已不再维护。思维狮身人面像是它的替代品。尽管此时它缺少几个功能,例如Ultra sphinx的摘录,但它在其他功能中弥补了这一不足。
回答
我建议使用act_as_ferret,因为我在工作中将它用于Scrumpad项目。索引编制可以作为一个单独的过程完成,这可以确保在重新编制索引的同时我们仍然可以使用我们的应用程序。这样可以减少网站的停机时间。搜索也更快。我们可以一次搜索多个模型,然后根据我们喜欢的字段对结果进行排序。