Задача: Cложный запрос поиска по неизвестному количеству слов во всех возможных последовательностях на базе LIKE заменить на аналогичный функционал на базе MATCH AGAINST
Пример запроса:
SELECT * FROM `table`
WHERE `column1`
LIKE '%word1%word2%' OR `column1` LIKE '%word2%word1%'
Не стал делать более длинный пример, но думаю, что идея ясна. При бОльшем количестве слов ситуация осложняется.
Я создал таблицу InnoDB в MySQL 5.7.29 с полнотекстовым индексом по полю column1 и начал экспериментировать. В итоге я пришёл к следующему варианту:
SELECT *
FROM `table`
WHERE MATCH (value) AGAINST ('+*word1* +*word2*' IN BOOLEAN MODE)
Запрос находит комбинацию слов в любом порядке, и это прекрасно. Но! Если использовать вместо слова '+*word1*' слово '+*ord1*' то значения со словом word1 запрос уже не извлекает.
Предполагаю, что это связано с тем, чт mysql анализирует морфологию и проверяет не реальное вхождение подстроки, а ищет однокорренные слова.
Можно ли всё-таки настроить запрос с помощью MATCH AGAINST, чтобы он находил подстроки внутри слов?