Ранжирование полнотекстового поиска

У меня есть небольшая проблема (надеюсь, именно на это) с ранжированием моих результатов полнотекстового поиска в базе данных 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. Я не получаю другой релевантности индексации как "по сравнению с количеством слов".

Есть мысли, как получить лучшее из обоих миров?

7
задан ajreal 16 September 2011 в 05:49
поделиться