Intereting Posts

MySQL Search Query – «Keep» не работает

Я немного запутался в следующем запросе, который мы использовали некоторое время. Следующие работы

Поисковый запрос "огонь"

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

StopW

Вместо этого вы можете использовать Lucene. Список стоп-слов намного меньше, плюс вы можете полностью удалить их:
Как проинструктировать StandardAnalyzer в Lucene не удалять стоп-слова?

Или вы можете добавить

 ft_stopword_file = "" 

или свяжите пустой файл «empty_stopwords.txt» с файлом .cnf / my.ini, перезапустите движок mysql и перестройте индексы:

Кроме того, если у вас нет allready, оставьте минимальное слово до 3 (ft_min_word_len = 3), чтобы иметь возможность искать 3 буквенных слова.

Более короткие слова (3,2) значительно увеличивают время запроса, особенно если поля с полным индексированным столбцом являются большими.