Выбор соответствия против в логическом режиме не работает нормально - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть BD с 3 миллионами строк.С id_table и другим типом поля текста (id_songs, name_song).У меня есть полный текстовый индекс в «name_song».

Мой выбор

SELECT * FROM songs 
WHERE MATCH(name_song) AGAINST ('love' in boolean mode)

это нормально.Но когда я запускаю

SELECT * FROM songs 
WHERE MATCH(name_song) AGAINST ('one' in boolean mode)

, это не показывает результаты.

Но с

select * from songs 
where name_song like '%one%'

у меня есть результаты.

Почему бы неУ меня есть результаты с одним словом?а при использовании как будто у меня есть?

1 Ответ

0 голосов
/ 26 сентября 2019

Похоже, ваш движок хранения - MyISAM.MyISAM имеет довольно большой список стоп-слов.Стоп-слово - это слова, которые игнорируются полнотекстовым парсером для индексации.Кроме того, one является стоп-словом для MyISAM FTS.

Проверьте полный список стоп-слов здесь: https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html#fulltext-stopwords-stopwords-for-myisam-search-indexes

Вы можете переопределить этот список, выполнив следующие инструкции:

Чтобы переопределить список стоп-слов по умолчанию для таблиц MyISAM, установите системную переменную ft_stopword_file.(См. Раздел 5.1.8, «Системные переменные сервера».) Значение переменной должно быть именем пути файла, содержащего список стоп-слов, или пустой строкой, чтобы отключить фильтрацию стоп-слов.Сервер ищет файл в каталоге данных, если не указан абсолютный путь для указания другого каталога.После изменения значения этой переменной или содержимого файла стоп-слова перезапустите сервер и перестройте ваши индексы FULLTEXT.

...