簡體   English   中英

跨多個模型搜索多個單詞

[英]Search for multiple words, across multiple models

我正在嘗試在站點中創建搜索功能,並且我希望用戶能夠搜索多個單詞,根據各種模型中存在的條件執行 substring 匹配。

為了這個例子,假設我有以下模型:

  • 員工
  • 公司
  • 直轄市

一個縣有多個市,有多個公司,有多個員工。

我希望搜索能夠針對 Employee.firstname、Employee.lastname、Company.name、Municipality.name 和 County.name 的組合進行搜索,並且我希望最終結果是 Employee 實例。

例如,搜索字符串“joe tulsa”應該返回所有員工,其中兩個詞都可以在我在上一句中命名的屬性中的某處找到。 我會得到一些誤報,但至少我應該讓塔爾薩縣的每個員工都被命名為“喬”。

我嘗試了幾種方法,但我不確定我是否走在正確的道路上。 我正在尋找一種很好的 RoR-ish 方式來做這件事,我希望有更多 RoR 智慧的人可以幫助勾勒出一個合適的解決方案。


我試過的:

我對這種搜索不是很有經驗,但是在 RoR 之外,我會手動創建一個 SQL 語句將所有表連接在一起,為每個單獨的搜索詞創建 where 子句,覆蓋不同的表。 也許使用生成器。 然后只需執行查詢並遍歷結果,手動實例化 Employee 對象並將它們添加到數組中。

為了在 RoR 中解決這個問題,我一直在:

1) 在我的項目中涉及與員工 model 相對應的命名范圍,但是當我需要加入兩個或更多“步驟”之外的表時(市和縣),我陷入了困境。

2)創建一個視圖(稱為“search_view”)將所有表連接在一起,以簡化查詢。 然后我想我會在這張桌子上使用 Employee.find_by_sql() ,這會給我帶來這些漂亮的 Employee 對象。 我想我會使用構建器來創建 SQL,而且似乎 Arel 是要使用的東西,所以我嘗試做類似的事情:

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

但生成的 Ariel::Table 不包含任何列,因此無法用於構建我的查詢。 在這一點上,我有點卡住了,因為我不知道如何獲得一個有效的查詢生成器。

我強烈建議您使用適當的搜索引擎來搜索此類內容,它會讓您的生活更輕松。 我遇到了類似的問題,我想“男孩,我敢打賭,設置像 Sphinx 這樣的東西意味着我必須先閱讀數千本手冊和教程”。 好吧,事實並非如此。

Thinking Sphinx是我推薦的 Rails gem,它可以很容易地集成 Sphinx。 你不需要有太多的經驗就可以開始:

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

我沒有嘗試過其他搜索引擎,但我對Sphinx很滿意。 我設法在不到一天的時間內建立了一個相對復雜的實時搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM