2010-01-31 176 views
10

我正在編寫我的第一個Ruby on Rails應用程序,並需要實現「搜索」功能。它需要搜索數據庫(3個不同表格中的每個表格有1列),並返回3個類別中每個類別中最相關的結果。有點像你如何在亞馬遜網站上進行搜索,將返回來自所有不同部門的結果。在Ruby on Rails 3應用程序中實現搜索?

在Ruby on Rails的世界中是否有一個寶石/庫/常用技術,我應該知道的(這與Rails 3一起工作)?否則,我應該怎麼做才能在我的應用程序中實現搜索功能?

回答

2

可能您需要使用一些搜索引擎。看看thinking sphinx插件。我也使用acts_as_ferret,但它可能會導致一些問題。

我不知道是否有一個插件可以完成您想要的所有功能。我會做這種方式:

  1. 實現搜索(使用SQL或者像獅身人面像等一些搜索引擎)
  2. 然後添加一些Ajax工具和自動完成。

谷歌是你的朋友:take a look herehere

4

我認爲這取決於您對搜索的「嚴重」程度。

如果您只是想在一些簡單的VARCHAR字段中進行搜索,您可以通過生成一些「LIKE'%xyz%'」語句來手動執行該操作,那麼所需的只是一個插件,可以幫助您。我最喜歡的是searchlogic。它可以在模型中啓用相當多的方便動態範圍,您可以將它們鏈接在一起(與其他範圍一樣)。例如,你可以寫這樣的事情:

User.last_name_like("Doe").age_gt(30).age_lt(40) 

下面是關於如何使用它的其他功能great screencast

但是,SQL LIKE語句並不適合在大塊文本中搜索。所以如果這就是你所需要的,你最好使用實際爲你的數據建立索引的插件。

在這種情況下,thinking sphinx(在其他答案中提到)是一個很好的解決方案。請記住,它需要一些特定於平臺的安裝步驟,並且只適用於PostreSQL和MySQL(它不適用於Rails的默認SQLite)。使用它也不那麼簡單 - 您需要定義要搜索的每個模型的索引,構建索引,啓動Sphinx等。