Ren*_*des 0 ruby search ruby-on-rails
我试图更像搜索结果返回结果
我的算法就是这个
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
Run Code Online (Sandbox Code Playgroud)
如果我搜索"Ruby on Rails",它将进行4种搜索方式.
1)删除左侧字母"uby on Rails".."ils"
2)删除正确的字母"Ruby on Rail".."Rub"
3)删除左右字母"uby on Rails","uby on Rail"......"on"
4)只使用3个字母"Rub","uby","by","y o","on"......"ils"
这四种方式好用吗?还有吗?
你为什么删除这些信件?您是否尝试确保如果有人搜索"小部件",您还会匹配"小部件"?
如果是这样,那么你想要做的就是称为" 词干 ",它实际上要比删除前导和尾随字母复杂得多.您可能还有兴趣从查询中删除" 停用词 ".这些是形成语法正确句子所必需的非常常见的单词,但对于搜索不是很有用,例如"a","the"等.
正确搜索是一个非常复杂和困难的问题.我建议您不要尝试自己解决,而是专注于您网站的核心目的.也许您可以在代码中利用Lucene项目中的搜索功能.此链接也可能有助于在Ruby on Rails中使用Lucene.
我希望有所帮助; 我意识到我有点撇开你原来的问题,但我真的不建议你自己解决这个问题.
归档时间: |
|
查看次数: |
1993 次 |
最近记录: |