小编典典

在多个模型中搜索多个单词

sql

我正在尝试在站点中创建搜索功能,并且希望用户能够搜索多个单词,并根据各种模型中存在的条件执行子字符串匹配。

为了这个示例,假设我有以下模型:

  • 员工
  • 公司
  • 市政府

一个县有多个直辖市,有多个公司,有多个员工。

我希望搜索能够针对Employee.firstname,Employee.lastname,Company.name,Municipality.name和County.name的组合进行搜索,并且希望最终结果是Employee实例。

例如,对字符串“ joe
tulsa”的搜索应返回所有Employees,这两个单词都可以在我在上一句中命名的属性中的某处找到。我会得到一些误报,但至少我应该让塔尔萨县的每个名为“乔”的员工都受益。

我已经尝试了几种方法,但是我不确定我是否走了正确的道路。我正在寻找一种很好的RoR-ish方法,并且希望具有RoR知识的人可以帮助您找到合适的解决方案。


我尝试过的是:

我对这种搜索不是很有经验,但是在RoR之外,我会手动创建一个SQL语句将所有表连接在一起,为每个单独的搜索词创建where子句,以覆盖不同的表。也许使用一个生成器。然后,只需执行查询并遍历结果,即可手动实例化Employee对象并将其添加到数组中。

为了解决RoR中的这一问题,我做了以下工作:

1)在我的项目中与Employee模型相对应的区域中使用命名作用域,但是当我需要在表中加入两个或更多“步骤”(市政和县)时,我陷入了困境。

2)创建一个将所有表连接在一起的视图(称为“
search_view”),以简化查询。然后以为我会在此表上使用Employee.find_by_sql(),这将为我产生这些漂亮的Employee对象。我以为我会使用生成器来创建SQL,并且似乎要使用Arel,因此我尝试执行以下操作:

view = Arel::Table.new(:search_view)

但是生成的Ariel :: Table不包含任何列,因此无法构建我的查询。由于我不知道如何获得一个有效的查询生成器,因此我有点卡住了。


阅读 166

收藏
2021-04-14

共1个答案

小编典典

我强烈建议您对此类搜索使用适当的搜索引擎,这样会使您的生活变得轻松多了。我遇到了类似的问题,我以为“男孩,我敢打赌设置Sphinx之类的东西意味着我必须先阅读成千上万的手册和教程”。好吧,事实并非如此。

我认为Sphinx 是Rails的瑰宝,因此可以很容易地集成Sphinx。您完全不需要任何经验就可以开始:

http://freelancing-god.github.com/ts/en/

我没有尝试过其他搜索引擎,但是我对Sphinx感到非常满意。我设法在不到一天的时间内建立了一个相对复杂的实时搜索。

2021-04-14