Вот мой запрос:
SELECT * from description WHERE (match(description) AGAINST ( '+will +smith' in boolean mode))
Я знаю, что will - это заглавное слово, поэтому я получаю пустой результат.
Как будет работать, если я все еще могу использовать оба слова для этого запроса? Нужно ли мне каким-то образом сбежать от этого?






Невозможно "избежать" стоп-слова для данного поиска. Подумайте об этом так: при создании полнотекстового индекса он пропускает индексирующие слова, если они являются стоп-словами. То есть слова не хранятся в полнотекстовом индексе. Таким образом, вы не можете впоследствии избежать слова в заданном поиске и волшебным образом увидеть слово в полнотекстовом индексе, поскольку оно не было включено при создании индекса.
Предполагая, что вы используете полнотекстовый поиск с InnoDB, решение, очевидно, состоит в том, чтобы определить вашу собственную таблицу, хранящую стоп-слова. Затем вы можете поместить в таблицу настроенный набор слов и использовать переменную конфигурации innodb_ft_server_stopword_table, чтобы ваш экземпляр MySQL использовал вашу настраиваемую таблицу перед созданием полнотекстового индекса. Таким образом, слово, которое вы хотите проиндексировать, будет включено при построении полнотекстового индекса.
См. https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html
Но это глобальная переменная, поэтому она повлияет на создание всего полнотекстового индекса для всех таблиц в этом экземпляре MySQL. Я полагаю, вы могли бы установить innodb_ft_server_stopword_table в свою настраиваемую таблицу, построить свой полнотекстовый индекс, а затем вернуть опцию в обычное значение. Но это было бы сложно, потому что каждый раз, когда вы перестраиваете свой полнотекстовый индекс (например, во время изменения таблицы или оптимизации таблицы), он вернется к стоп-словам по умолчанию.