Не удается изменить минимальную длину слова в полнотекстовом формате InnoDB

#mysql #database #performance #full-text-search #innodb

#mysql #База данных #Производительность #полнотекстовый поиск #innodb

Вопрос:

У меня есть MySQL 5.7.31 таблица InnoDB с включенным полнотекстовым индексом…

если я ищу более длинное слово, я получаю результаты:

 SELECT * FROM my_table WHERE match(my_title) against('landscape in' IN BOOLEAN MODE)
  

если я ищу полный текст для короткого слова (например in ), я не получаю результатов

 SELECT * FROM my_table WHERE match(my_title) against('in' IN BOOLEAN MODE)
  

данные есть, я могу найти их с like %% запросом:

 SELECT * FROM my_table WHERE my_title LIKE '%in%' 
  

Я установил эти два в / etc /my.cnf, я понимаю, что один для InnoDB, а другой для MyISAM, я перезапустил MySQL, я все еще не могу выполнить приведенный выше короткий полнотекстовый запрос.

 ft_min_word_len=1
innodb_ft_min_token_size=1
  

Редактировать:
Если у меня есть значение, подобное landscape in Paris , то я получаю данные для against(' landscape Paris' IN BOOLEAN MODE) , но НЕ для against(' landscape in Paris' IN BOOLEAN MODE)

Возможно, in это зарезервированное слово?

Ответ №1:

«in», вероятно, находится в «стоп-листе». Измените спецификацию файла списка остановок.

После изменения минимального значения или списка остановок необходимо перестроить полнотекстовый индекс (ы). (Перезапуск MySQL не требуется.)

Альтернативу, которую я использовал в одной ситуации: я добавил к длинным словам. Например, against(' landscape in Paris' IN BOOLEAN MODE) вероятно, достигнет вашей цели без изменения минимального значения или списка стоп-слов.

(Да, есть несколько «различий» между MyISAM и InnoDB. Я не нашел окончательного списка в документах. Вот моя попытка составить такой список:http://mysql.rjweb.org/doc.php/myisam2innodb#fulltext)