2015-04-16 43 views
1

如何獲得結果查詢如谷歌搜索在活動記錄欄?查詢結果接近谷歌搜索軌道

example 1 : 

User.all 

result : 
[{name: "john now", age: "14"}, {name: "desy awesome", age: "19"}] 

example 2 : 
User.where("name LIKE ?", "%jo%") 

result : 
[{name: "john now", age: "14"}] 

我的問題是,當我搜索名稱「johnnow」我想得到像波紋管的結果。例如:

User.where("name LIKE ?", "%johnnow%") 

    result : 
    [{name: "john now", age: "14"}] 

那是怎麼回事?

+0

多大users'你有表'? – Saurabh

+0

你需要某種字典來拆分字符串,就像'john'出現在字符串中,然後拆分字符串並在拆分字詞上搜索。 –

+0

您可以使用全文搜索庫。例如'思考斯芬克斯' – usmanali

回答

1

這種事情實際上是一個搜索引擎,而不是SQL。還有很多其他的方式可能讓你的東西以模糊的方式匹配,例如區分大小寫,拼寫錯誤等。試圖用複雜的SQL覆蓋它會讓你慢慢瘋狂。

爲此我使用Searchkick,但還有很多其他的選擇。您將需要一個搜索索引器,例如Elasticsearch或Solr,然後是某種類型的寶石,將其綁定到您的AcitveRecord類中。在終端

class User < ActiveRecord::Base 
    searchkick 
end 

然後:

使用Searchkick爲User模型

User.reindex 

然後搜索:

users = User.search 'johnnow' 
+0

我得到錯誤「用戶=連接被拒絕 - 連接(2)」本地主機「端口9200」 –

+0

你有彈性搜索設置正確嗎?這聽起來像你沒有這個跑步。使用自制軟件將其安裝在Mac上,並確保在做其他事情之前先運行它。 –

+0

你對,我'忘記運行彈力蛋白xD 謝謝@Matt Gibson –