跨多个模型搜索多个单词

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

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

  • 雇员
  • 公司

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

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

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

我尝试了几种方法,但我不确定我是否会走正确的道路。 我正在寻找一种很好的RoR-ish方法,我希望有更多RoR智慧的人可以帮助勾勒出一个合适的解决方案。


我试过的:

我对这种搜索不太熟悉,但在RoR之外,我手动创建一个SQL语句将所有表连接在一起,为每个单独的搜索词创建where子句,覆盖不同的表。 也许使用建设者。 然后只需执行查询并遍历结果,手动实例化Employee对象并将它们添加到数组中。

为了在RoR中解决这个问题,我一直在:

1)在我的项目对应员工模型中涉及命名范围,但当我需要加入两个或更多“步骤”(市政府和县)的表时,我陷入困境。

2)创建一个将所有表连接在一起的视图(称为“search_view”),以简化查询。 然后以为我会在这个表上使用Employee.find_by_sql(),这会产生这些好的Employee对象。 我以为我会使用构建器来创建SQL,似乎Arel是使用的东西,所以我尝试做类似的事情:

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

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

我强烈建议您使用适当的搜索引擎,这样可以让您的生活更轻松。 我有一个类似的问题,我想“男孩,我打赌设置像Sphinx这样的东西意味着我必须首先阅读成千上万的手册和教程”。 嗯,事实并非如此。

思考Sphinx是我推荐的Railsgem,它可以很容易地集成Sphinx。 开始时您根本不需要太多经验:

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

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