MySQL полный текст с основами
Я создаю небольшую функцию поиска для моего сайта. Я беру запрос моего пользователя, определяю ключевые слова и затем выполняю полнотекстовый поиск MySQL по ключевым словам.
Проблема в том, что MySQL рассматривает основы как буквальные. Вот процесс, который происходит:
- пользователь ищет слово типа "бейсбол"
- мой алгоритм stemming (Porter Stemmer) превращает "бейсбольные мячи" в "бейсбольные"
- fulltext не находит ничего подходящего для "бейсбола", хотя должны быть совпадения для "бейсбола" и "бейсбола"
Как мне сделать эквивалент LIKE 'basebal%' с полным текстом?
РЕДАКТИРОВАТЬ:
Вот мой текущий запрос:
SELECT MATCH (`title`,`body`) AGAINST ('basebal') AS `relevance`,`id` FROM `blogs` WHERE MATCH (`title`,`body`) AGAINST ('basebal') ORDER BY `relevance` DESC
2 ответа
Я думаю, что это будет работать со звездочкой в конце: basebal*
, Увидеть *
Оператор на этой странице для получения дополнительной информации.
IN NATURAL LANGUAGE MODE
является режимом по умолчанию и несовместим со стеммингом. ПытатьсяIN BOOLEAN MODE
с подстановочными знаками...
SELECT MATCH (`title`, `body`) AGAINST ('basebal*' IN BOOLEAN MODE) AS `relevance`, `id` FROM `blogs` WHERE MATCH (`title`, `body`) AGAINST ('basebal*' IN BOOLEAN MODE) ORDER BY `relevance` DESC
Приведенный выше пример дает ясность для людей, которые сталкиваются с этим вопросом через 10 лет после того, как его задали. Тема по-прежнему актуальна и извлекает выгоду из полных примеров
См. Эту ссылку. Stemming не установлен по умолчанию в MySQL, но вы можете установить его самостоятельно.
http://oksoft.blogspot.com/2009/05/stemming-words-in-mysql.html