Mysql rails应用程序上的站点范围搜索

Mysql rails应用程序上的站点范围搜索,mysql,ruby-on-rails,search,plugins,Mysql,Ruby On Rails,Search,Plugins,我正在尝试将搜索功能添加到我的一个rails应用程序中。我只需要它搜索好几个模型的mysql列。我想知道最好的方法是什么。我想我应该使用一个插件,但我没有看到任何人真正推荐一个插件。有没有一个你会推荐给其他人?扮演雪貂怎么样?谢谢。我从来没有用过扮演雪貂。你可以做点什么。创建一个如下所示的表: create_table(:indexed_models) do |t| t.column :name, :string t.column :model_id, :id t.column :i

我正在尝试将搜索功能添加到我的一个rails应用程序中。我只需要它搜索好几个模型的mysql列。我想知道最好的方法是什么。我想我应该使用一个插件,但我没有看到任何人真正推荐一个插件。有没有一个你会推荐给其他人?扮演雪貂怎么样?谢谢。

我从来没有用过
扮演雪貂。你可以做点什么。创建一个如下所示的表:

create_table(:indexed_models) do |t|
  t.column :name, :string
  t.column :model_id, :id
  t.column :index, :string
end
对于要搜索的每个模型,连接可搜索列中的值以创建“索引”。将结果插入到索引的_models表中。其中,name是模型的名称,model_id是它的主键,index是可搜索的内容。当指定为“可搜索”的模型更改时,使用观察者创建和更新索引的_models表

对索引模型的索引字段执行文本搜索,然后根据返回的模型名称和主键生成模型容器


我也从未使用过这种方法,但我也一直在想办法。

也许值得一试。ryanb先生刚刚做了一个调查。如果您正在寻找全文解决方案,他还有一个。

我强烈推荐Sphinx作为搜索守护进程和索引器。它真的很好,可定制和可扩展


作为客户端和前端库,请使用UltraSphinxThinkingSphinx。第二个最近得到了更好的支持。

我使用Sphinx来实现这一点。它的实现非常简洁——我有20行使用Riddle客户端的Ruby代码(来自thinking_sphinx guy)。有一个陷阱-Sphinx需要一个唯一的文档ID用于索引的每件事情。我使用sql\u query\u pre、sql\u query\u post和@变量来确保每个文档都有一个唯一的ID(我完全忽略)。Searchlogic很棒,但我不相信它提供任何跨模型搜索功能。(如果我错了,请纠正我!)斯芬克斯和ThinkingSphinx确实是这样,而且在我看来非常有效,您可以使用索引模型与其原始模型之间的多态关系-ActiveRecord将为您提供一种从索引模型到原始模型的方法,而无需您自己滚动。@Neil很好的一点是,对所有这些可搜索模型使用STI(单表继承)。这样,create_table的“name”列就没有必要了。如果你已经有了模型,或者无法让STI在这些模型上运行,那么就需要做更多的工作。ThinkingSphinx能够搜索像PDF这样的文件吗?