Я выполняю простой полнотекстовый запрос mysql, который ищет пользователей на моем сайте на основе их «отображаемого имени». Пример запроса приведен ниже - в этом примере мы ищем «магазин игрушек lancaster»:
SELECT MATCH(`display_name`) AGAINST ('lancaster toy store') as `rel`
WHERE MATCH(`display_name`) AGAINST ('lancaster toy store')
ORDER BY `rel` DESC
Это хорошо работает в том смысле, что оно приводит к хорошему количеству результатов, но пример результатов будет:
- магазин игрушек Шарлотта
- магазин игрушек на Бродвее
- Аризона магазины игрушек
- магазин игрушек Ланкастер
- игрушки восточного побережья
Как вы видите, моя проблема в том, что люди ищут «магазин игрушек Lancaster», и очевидный лучший результат приближается к середине или дну.
Я также использую технику портера-стеммера.
Есть идеи, как получить более точные результаты?
UPDATE
Вот реальный запрос (фактический термин поиска - «восстановление lancaster»):
SELECT `id`,
MATCH (`display_name`) AGAINST ('lancast* restor*' IN BOOLEAN MODE)
AS `RELEVANCY`
FROM `users`
WHERE `status` = 'active'
&& MATCH (`display_name`) AGAINST ('lancast* restor*' IN BOOLEAN MODE)
ORDER BY `RELEVANCY` DESC
LIMIT 25
и вот результаты:
- Место обитания человечества округа Ориндж - магазины
- Восстановить 15 Четвертая улица Дувр NH
- Моррис Хабитат для восстановления человечества
- Хабитат ReStore Лима Огайо
- Место обитания Человечества Шарлотта ReStore
- Восстановить округ Монтгомери
- Место обитания Дейтон Огайо для человечества
- Восстановить
- Место обитания Ланкастерского района для восстановления человечества