Je suis en train de retourner des résultats plus comme la rechercheRails: Un bon algorithme de recherche
Mon algorithme Curren est ce
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
Si je recherche « Ruby on Rails » il fera 4 recherche façons.
1) Suppression des lettres gauche "uby on Rails" .. "ils"
2) Retrait des lettres à droite "Ruby on rails" .. "Rub"
3) Suppression de gauche et à droite lettres "uby on Rails", "uby on Rail" ... "on"
4) En utilisant seulement 3 lettres "Rub", "uby", "par", "yo", "on" ... "ils"
Est-ce bon d'utiliser ces 4 façons? Il n'y en a plus? Pourquoi supprimez-vous ces lettres?
Je ne suis pas exactement sûr de ce que vous essayez de faire, mais il semble que tout ce qui correspondrait à 1 - 3 serait égalé par 4. – mckeed
J'essaie de trouver des mots similaires à la recherche –
Similaires dans la signification ou similaire en orthographe? Si l'orthographe est vraiment tout ce qui vous intéresse, j'irais avec l'idée de distance Levenshtein que @AlexReisner mentionné. Sinon, rendez-vous avec un vrai moteur de recherche. D'une manière ou d'une autre, je ne pense pas que vous obtiendrez des résultats très favorables en coupant les lettres de début et de fin de vos termes de recherche. – pkaeding