Я пытаюсь возвращать результаты больше как поиск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) Удаление левой буквы "убий по рельсам" .. "илы"
2) Удаление правильные буквы "Рубин на железной дороге" .. "Rub"
3) Удаление левого и правого буквы «uby on Rails», «uby on Rail» ... «on»
4) Используя только 3 буквы «Rub», «uby», «by», «yo», «on» ... "ils"
Полезно использовать эти 4 способа? Там больше?
Я не совсем уверен, что вы пытаетесь сделать, но похоже, что все, что соответствует 1 - 3, также будет соответствовать 4. – mckeed
Я пытаюсь найти похожие слова в поиске –
Похожий по смыслу или подобный в орфографии? Если орфография на самом деле все, о чем вы заботитесь, я бы пошел с идеей Levenshtein Distance, о которой упоминал @AlexReisner. В противном случае, идите с реальной поисковой системой. В любом случае, я не думаю, что вы получите очень благоприятные результаты, обрезая ведущие/трясущиеся буквы из ваших поисковых запросов. – pkaeding