a1 = "+"
a2 = "*" @searchstring = params[:searching].gsub(" ", "* +") @results = Product.find_by_sql("SELECT * FROM products WHERE MATCH
(name,sku) AGAINST ('"+a1+@searchstring+a2+"' IN BOOLEAN MODE) order by
name desc LIMIT 0,50;")
It works, BUT not for numbers. Any idea why it coesn´t work for numbers?
If I have example: "this is 34" in the database. It works fine "this
is", but as soon as I enter the "34" it shows no results.
By brute force, I meant simply a quick and dirty operation
1. split the string into components
2. modify the components
3. reassemble/join the components
If you have need to do this on a repetitive basis, you could develop a
method to apply this logic, something like
def hilite(a_str, a_nbr, a_tag='b')
ix = a_nbr - 1
ar = a_str.split(' ')
ar[ix] = "<#{a_tag}>#{ar[ix]}</#{a_tag}>"
str = ar.join(' ')
return str
end
strx = "This is a long string"
p strx
strx = hilite(strx,2) # make word 2 bold
p strx
strx = hilite(strx,4,'i') # make word 4 italic
p strx
This is still pretty brute force, since the method will break badly if
you pass it the wrong elements - no error/bounds checking. You could
modify it to scan for a particular word to hilite instead of using a
word number.
Enjoy,
···
On Dec 29, 2007 12:11 PM, Mark Toth <mark.toth@telia.com> wrote:
a1 = "+"
a2 = "*" @searchstring = params[:searching].gsub(" ", "* +") @results = Product.find_by_sql("SELECT * FROM products WHERE MATCH
(name,sku) AGAINST ('"+a1+@searchstring+a2+"' IN BOOLEAN MODE) order by
name desc LIMIT 0,50;")
It works, BUT not for numbers. Any idea why it coesn´t work for numbers?
If I have example: "this is 34" in the database. It works fine "this
is", but as soon as I enter the "34" it shows no results.
Does it work for longer numbers? By default mysql won't index words less than 3 characters or so (check the doc) there are also stopwords etc...