我想在我的网站上建立一个类似于Facebook的搜索。
例如,输入搜索短语并从多个表中返回结果。
反过来,我的网站上有两张表格,其中包括以下内容:帐户和帖子。我想进行一次搜索,根据搜索短语返回两个表的结果。
我对如何做到这一点很困惑。
请有人指出我正确的方向。
谢谢,
布赖恩
答案 0 :(得分:8)
您可以通过joins
加入第二个表来搜索已加入的字段。例如:
Account.where(:your_attribute => search_term).joins(:post).where("posts.some_attribute = ?", search_term_2)
或者如果您从相反的方向搜索:
Post.where(:some_attribute => search_term).joins(:accounts).where("accounts.your_attribute = ?", search_term_2)
如果你想在两个表之间做or
,你可以。只需稍微修改一下查询:
Post.joins(:accounts).where("posts.attribute = ? or accounts.attribute = ?", search_term)
答案 1 :(得分:1)
如果我正确地阅读您的帖子,您想要做的是在一个搜索框中,您想要搜索多个表并返回多种类型的数据。在Facebook上,它返回人员,应用程序,页面等。通过进行加入,您将返回Post及其关联用户,但是,这将不会返回没有任何帖子的用户,即使您做了如果您想要搜索其他模型,表格上的“外部联接”将无法扩展。
在没有引入更多软件的情况下,您最简单的解决方案是创建一个数据库视图,将数据映射到更容易查询的结构。在Rails / Ruby中,您将像普通数据库表一样查询该视图。
更复杂的解决方案是使用全文索引(如Apache Solr)并使用类似acts_as_solr_reloaded的gem来查询全文索引。在一天结束时,这将是一个更强大和可扩展的解决方案。