我想更多的返回結果像搜索Rails的:一個好的搜索算法
我CURREN算法是這樣的
def search_conditions(column, q)
vars = []
vars2 = []
vars << q
if q.size > 3
(q.size-2).times do |i|
vars2 << q[i..(i+2)]
next if i == 0
vars << q[i..-1]
vars << q[0..(q.size-1-i)]
vars << q[i % 2 == 0 ? (i/2)..(q.size-(i/2)) : (i/2)..(q.size-1-(i/2))] if i > 1
end
end
query = "#{column} ILIKE ?"
vars = (vars+vars2).uniq
return [vars.map { query }.join(' OR ')] + vars.map { |x| "%#{x}%" }
end
如果我搜索「Ruby on Rails的」它將使搜索4方法。
1)卸下左側字母 「uby on Rails的」 .. 「ILS」
2)卸下右字母 「紅寶石上軌」 .. 「揉搓」
3)卸下左側和右側字母「uby on Rails」,「uby on Rail」...「on」
4)僅使用3個字母「Rub」,「uby」,「by」,「yo」,「on」... 「ils」
很好用這4種方式嗎?還有嗎?
我不完全確定你想要做什麼,但看起來像任何匹配1 - 3的東西也會被4匹配。 – mckeed 2010-01-21 23:34:11
我試圖找到與搜索相似的單詞 – 2010-01-22 00:22:43
類似的意思,或類似的拼寫?如果拼寫真的是你所關心的,我會用@AlexReisner提到的Levenshtein Distance思想。否則,去一個真正的搜索引擎。無論哪種方式,我認爲您不會通過修剪搜索字詞中的前導/後綴字母來獲得非常有利的結果。 – pkaeding 2010-01-22 00:38:10