Полнотекстовый поиск возвращает только точные совпадения - PullRequest
2 голосов
/ 01 сентября 2009

У меня есть следующий скрипт

select c.id 
from ".TBL_COUPONS." as c 
inner join ".TBL_BUSINESS." as b 
on c.business_id = b.business_id 
inner join ".TBL_BLOCATION." as l 
on c.business_id = l.business_id 
where 
(match(c.name) against ('$search') 
    or 
match (b.name,b.category,b.subcat) against ('$search')) 
and l.zip = '$zip'

почему это только возвращает точные совпадения? Например, если я ищу слесаря, ничего не происходит. но если я буду искать слесарей, я получу два результата. (оба поиска включали $ zip = '75061')

Ответы [ 3 ]

2 голосов
/ 06 сентября 2009

Один из способов сделать это - заменить несколько последних символов подстановочными знаками и выполнить МАТЧ () ПРОТИВ в логическом режиме

Поисковый термин "слесарь" должен быть изменен в php на "слесарь *", и ваш код будет выглядеть примерно так

match(c.name) against ('$search' IN BOOLEAN MODE) 

Для общих целей вы должны удалить слова 's', 'ed', 'ing' и т. Д. Из слов в исходном поисковом запросе и добавить подстановочный знак * в конце.

0 голосов
/ 01 сентября 2009

Так работает полнотекстовое сопоставление. Он не знает о множественном числе и соответствует целым словам. Проблема возникает время от времени. Иногда, когда вы видите сгенерированное предложение «Вы имели в виду ...», это страница, пытающаяся решить именно эту проблему.

0 голосов
/ 01 сентября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...