Я немного запутался в следующем запросе, который мы использовали некоторое время. Следующие работы
Поисковый запрос "огонь"
SELECT product FROM product_descriptions WHERE MATCH(product) AGAINST('+fire*' IN BOOLEAN MODE) LIMIT 5
Возвращает
Fire Storage 31020 S1 E Fire Storage 31020 S1 K Fire Storage 31021 S1 E Fire Storage 31021 S1 K Fire Storage 31022 S1 E
Однако следующий поисковый запрос для "сохранить"
SELECT product FROM product_descriptions WHERE MATCH(product) AGAINST('+keep*' IN BOOLEAN MODE) LIMIT 5
Не возвращает никаких результатов, однако у нас есть продукты в таблице, такие как «Знак« Запирание дверной ручки »,« Keep Clear Sign »,
Единственное слово, которое не работает, я нашел до сих пор, это работа «держать»,
Следующие поисковые запросы работают «сталь», «дверь», поскольку я думал, что это может быть проблема с двойными символами
Keep – это стоп-слово
Википедия :
При вычислении стоп-слова – это слова, которые отфильтровываются до или после обработки данных естественного языка (текст). […] Некоторые инструменты специально избегают их удаления для поддержки поиска фразы. Любая группа слов может быть выбрана в качестве стоп-слов для заданной цели. Для некоторых поисковых машин это одни из наиболее распространенных коротких функциональных слов, таких как,,,,,, и. В этом случае стоп-слова могут вызвать проблемы при поиске фраз, которые их включают, особенно в таких именах, как «Кто», «The» или «Take That». Другие поисковые системы удаляют некоторые из наиболее распространенных слов, включая лексические слова, такие как «хочу», из запроса, чтобы повысить производительность.
http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html
Вы можете найти фактически используемый список в файле storage / myisam / ft_static.c.
Этот факт изложен в http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
Вместо этого вы можете использовать Lucene. Список стоп-слов намного меньше, плюс вы можете полностью удалить их:
Как проинструктировать StandardAnalyzer в Lucene не удалять стоп-слова?
Или вы можете добавить
ft_stopword_file = ""
или свяжите пустой файл «empty_stopwords.txt» с файлом .cnf / my.ini, перезапустите движок mysql и перестройте индексы:
Кроме того, если у вас нет allready, оставьте минимальное слово до 3 (ft_min_word_len = 3), чтобы иметь возможность искать 3 буквенных слова.
Более короткие слова (3,2) значительно увеличивают время запроса, особенно если поля с полным индексированным столбцом являются большими.