Как я могу изменить MySQL, чтобы приспособиться к этому?
Вам придется изменить представление MySQL о том, что такое слово.
Во-первых, минимальная длина слова по умолчанию равна 4. Это означает, что ни один поисковый термин, содержащий только слова <4 букв, никогда не будет совпадать, будь то "C ++" или "cpp". Вы можете настроить это, используя опцию конфигурации <a href="http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_ft_min_word_len" rel="noreferrer"> ft_min_word_len , например. в вашем my.cfg:
[mysqld]
ft_min_word_len=3
(Затем остановите / запустите MySQLd и перестройте полнотекстовые индексы.)
Во-вторых, «+» не считается буквой MySQL. Вы можете сделать это буквой, но тогда это означает, что вы не сможете найти слово «рыба» в строке «рыба + чипсы», поэтому требуется некоторая осторожность. И это не тривиально: требуется перекомпиляция MySQL или взлом существующего набора символов. См. Начало раздела «Если вы хотите изменить набор символов, которые считаются символами слова ...» в разделе 11.8.6 документа.
экранируйте символ + в процессе ввода моих данных в виде чего-то вроде "__plus", а затем измените мой поиск, чтобы приспособить
Да, что-то вроде этого является распространенным решением: вы можете хранить свои «реальные» данные (без экранирования) в первичной, окончательной таблице - обычно используя InnoDB для соответствия ACID. Затем можно добавить вспомогательную таблицу MyISAM, содержащую только искаженные слова для приманки полнотекстового поиска. Используя этот подход, вы также можете использовать ограниченную форму стемминга.
Другой возможностью является обнаружение поисков, которые MySQL не может выполнить, например, с использованием только коротких слов или необычных символов, и вернуться к простому, но медленному поиску LIKE или REGEXP только для этих поисков. В этом случае вы, вероятно, также захотите удалить стоп-лист, установив ft_stopword_file в пустую строку, так как нецелесообразно выбирать все в этом как особенное.