我试图在网站中创建搜索功能,并且我希望用户能够搜索多个词,根据存在于各种模型中的条件执行子字符串匹配。在多个模型中搜索多个词
对于这个例子来说,假设我有以下型号:
- 员工
- 公司
- 市
- 县
一个县有多个直辖市,其中有多家公司,有多名员工。
我希望搜索能够根据Employee.firstname,Employee.lastname,Company.name,Municipality.name和County.name的组合进行搜索,并且我希望最终结果为Employee实例。
例如,搜索字符串“joe tulsa”应该返回所有员工,其中的两个词可以在前面句子中指定的属性中找到。我会得到一些误报,但至少我应该让塔尔萨县的每个员工都成名为“乔”。
我已经尝试了几种方法,但我不确定我是否会走向正确的道路。我正在寻找一个很好的RoR-ish方式来做这件事,我希望有更多RoR智慧的人可以帮助勾画出合适的解决方案。
我曾尝试:
我不是很有经验的这种搜索的,但回报率之外,我会手动创建一个SQL语句中加入所有的表一起,创建where子句对于每个单独的搜索词,覆盖不同的表格。也许使用建设者。然后只需执行查询并遍历结果,手动实例化Employee对象并将它们添加到数组中。
为了RoR中解决这个问题,我已经:
1)在我的项目有什么对应于员工型号命名初涉范围,但是当我需要表格两个或两个以上的加盟我被困“步”(市和县)。
2)创建一个视图(称为“search_view”)将所有表连接在一起,以简化查询。然后以为我会在这个表上使用Employee.find_by_sql(),这会让我产生这些好的Employee对象。我想我会用生成器创建的SQL,它似乎阿雷尔是使用的东西,所以我试图做这样的事情:
view = Arel::Table.new(:search_view)
但由此产生的阿里尔::表不包含任何列,所以无法构建我的查询。在这一点上,我有点卡住,因为我不知道如何得到一个工作查询生成器。
你有没有尝试像Sphinx或Solr自定义搜索引擎适当的宝石? – Bohdan
不,我没有试过这些。我们在任何表格中都有几千条记录,所以我认为这可能是过度的。你认为这是要走的路? – rogerkk
说实话我从来没有使用任何它(也许有人会张贴答案的利弊或检查http://stackoverflow.com/questions/737275/pros-cons-of-full-text-search-engine -lucene-sphinx-postgresql-full-text-searc),但如果我必须解决类似的任务,我肯定会使用一个 – Bohdan