Я запускаю простой текстовый запрос mysql, который ищет пользователей на моем сайте, исходя из их «отображаемого имени». Пример запроса ниже - в данном примере мы ищем «Ланкастер магазин игрушек»:Как повысить точность текста в mysql?
SELECT MATCH(`display_name`) AGAINST ('lancaster toy store') as `rel`
WHERE MATCH(`display_name`) AGAINST ('lancaster toy store')
ORDER BY `rel` DESC
Он хорошо работает в том, что он тянет хорошее количество результатов, но пример результатов будет:
- шарлотка магазин игрушек
- магазин игрушек на Бродвее
- аризона магазины игрушек
- магазин игрушек Ланкастера
- восточное побережье игрушки
Как вы можете видеть, моя проблема в том, что люди ищут «магазин игрушек ланкастера», и очевидный лучший результат приближается к середине или дну.
Я также использую технику портер-стеблем.
Любые идеи, как получить более точные результаты?
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
и вот результаты:
- Среда обитания для Человечества Orange County - Резервы
- ReStore 15 Fourth Street Dover NH
- Моррис Хабитат для человечества ReStore
- Habitat ReStore Лима Огайо
- Среда обитания для Человечества Шарлотта ReStore
- ReStore Montgomery County
- Дейтон Огайо Среда обитания для Человечества ReStore
- ReStore
- Lancaster Область обитания для Восстановление слуха
Я действительно не имеют хороший ответ на свой вопрос, просто хочу указать на то, что вы могли бы хотеть рассмотреть разгружая процесс поискового сервера, как Solr или Сфинкса. Они обрабатывают введенные пользователем запросы намного лучше (и быстрее), чем полный текст mysql. Конечно, есть накладные расходы на настройку сервера поиска - но все же что-то, что нужно учитывать. –
ben, плохо проверить это ... спасибо за предложение – johnnietheblack