0
我想寫一個相對簡單的算法搜索字符串的幾個屬性搜索和排名結果
給出了一些數據:
一些數據:
1: name: 'Josh', location: 'los angeles'
2: name: 'Josh', location: 'york'
搜索字符串:「josh york」
結果應該是[2,1],因爲該查詢字符串會兩次擊中第二條記錄,並且第一個r ecord一次。
這裏假設不區分大小寫是安全的。
所以這裏是我到目前爲止,在紅寶石/活動記錄:
query_string = "josh new york"
some_attributes = [:name, :location]
results = {}
query_string.downcase.split.each do |query_part|
some_attributes.each do |attribute|
find(:all, :conditions => ["#{attribute} like ?", "%#{query_part}%"]).each do |result|
if results[result]
results[result] += 1
else
results[result] = 1
end
end
end
end
results.sort{|a,b| b[1]<=>a[1]}
我有這種方法的問題是它會產生大量的查詢(query_string.split.length * some_attributes。長度)。
我可以通過減少查詢次數嗎?
我很喜歡在ruby中進行排序,雖然如果這可以以某種方式堵塞到SQL中,那也不錯。
我想任何「全功能」的文本搜索「引擎」是矯枉過正的搜索一個表中的兩列。在這裏尋求簡單/輕量。 – jsharpe 2009-09-24 14:19:14