当前位置: 首页 > 面试题库 >

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

蒙化
2023-03-14
问题内容

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

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

  • 员工
  • 公司
  • 市政府

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

我希望搜索能够针对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不包含任何列,因此无法构建我的查询。由于我不知道如何获得一个有效的查询生成器,因此我有点卡住了。


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我第一次使用Postgresql,并且试图在我的网站中创建一个搜索引擎。我有这张桌子: 然后我为表的每个字段创建了一个索引(这是正确的方法吗?或者我可以为所有字段创建一个索引?): 现在,如果我想在每个索引中搜索一个单词,SQL查询是什么? 我尝试了这个,它的工作原理: 是否存在更好的方法来做到这一点?我可以搜索多个吗?我的一个朋友提出了一个解决方案,但这是针对MySQL数据库的: P

  • 问题内容: 我从来没有真正听到过关于这个问题的直接答案,我只需要FULLTEXT搜索包含多个单词“ Firstname Lastname”的几列 但是,如果我在此处输入多个单词,它将无法运行查询。 问题答案: 如果要进行精确搜索:

  • 问题内容: 我曾经使用过django,haystack和elasticsearch。 我的search_index.py: 搜索表格: 模板: 看 ` 我得到所有的价值,那里有“老板”和“挡泥板” 当您在搜索框中输入“ boss fender”时,我没有结果。从搜索表单中,我只能得到一个单词的结果,例如“老板”。如何使搜索多个单词的能力? 问题答案: 这个月我陷入了这个问题。 为了执行正确的查询,

  • 问题内容: 我在MySQL数据库中有几个临时表,它们共享相同的架构并具有动态名称。我将如何使用Django与这些表进行交互?一个模型可以从多个表中提取数据吗? 问题答案: 我相信,你可以创建一个工厂函数,该函数将通过动态db_table返回你的模型。 编辑:每次调用此函数时,Django不会创建类属性的新实例。为它创建一个新实例取决于类的名称(Django必须将其缓存在某个地方)。元类可用于在运行

  • 问题内容: Django 是否可以在一个模型中包含多个模型?我正在尝试创建个人资料编辑表单。因此,我需要包括User模型和 UserProfile模型中的某些字段。目前我正在使用2种形式 有没有一种方法可以将这些合并为一个表单,或者我是否只需要创建一个表单并处理数据库加载并保存自己? 问题答案: 你可以只在一个html元素的模板中显示这两种形式。然后,只需在视图中单独处理表单即可。你仍然可以使用而

  • 我开始了Django-haystack和弹性搜索的实验。 使用: models.py 我想为上述模型创建一个搜索索引: 是否可以使用多个模型创建搜索索引。或者我必须为多个模型创建多个搜索索引。 注:两种型号完全独立。