У меня есть небольшая проблема (надеюсь, именно на это) с ранжированием моих результатов полнотекстового поиска в базе данных mysql. Я пытался написать это двумя способами:
NATURAL WAY:
SELECT SQL_CALC_FOUND_ROWS *,
MATCH(productname,keywords) AGAINST('$cl_search') AS score
FROM products
WHERE MATCH(productname,keywords) AGAINST('$cl_search')
ORDER BY score DESC,lastupdated DESC;
BOOLEAN WAY:
SELECT SQL_CALC_FOUND_ROWS *,
((MATCH(productname) AGAINST('$cl_search' IN BOOLEAN MODE))+
(MATCH(keywords) AGAINST('\"$cl_search\"' IN BOOLEAN MODE))) AS score
FROM products
WHERE MATCH(productname,keywords) AGAINST('$cl_search')
ORDER BY score DESC,lastupdated DESC;
Мне нравится индексирование, которое я получаю, когда я ищу в режиме естественного языка, но как мне помешать кому-то ввести "bag bag bag" в качестве названия продукта, чтобы получить хорошие результаты поиска?
Так что я написал булевый способ, чтобы исправить это, но 1. это медленнее и 2. Я не получаю другой релевантности индексации как "по сравнению с количеством слов".
Есть мысли, как получить лучшее из обоих миров?