MySQL Сбой полнотекстового поиска, начинающегося с короткого слова - PullRequest
0 голосов
/ 29 апреля 2020

Я использую запрос, подобный этому, в PHP, чтобы найти посты по заголовку и содержанию:

SELECT * FROM `db_table` WHERE MATCH(ptitle, pcontent) AGAINST ("+'.$search.'*" IN BOOLEAN MODE)

Это работает довольно хорошо, но у меня возникают проблемы, когда поиск начинается с короткого слова, такого как Spani sh article ('el', 'la').

Например, когда я пытаюсь найти пост с названием "El Perro" среди других постов, я делаю следующие поиски и get:

  • "El Perro" -> ничего.
  • "Perro" -> найдено.
  • "El" -> возвращает другие сообщения, но не одно Я ищу.
  • "Perro El Perro" -> найдено.

Видимо проблема возникает, когда поиск начинается с короткого слова. Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 29 апреля 2020

В полном тексте есть минимальные значения для длины слова

По умолчанию слова длиной менее 3 символов или длиной более 84 символов не отображаются в полной версии InnoDB. индекс текстового поиска. Максимальные и минимальные значения длины слова настраиваются с помощью переменных innodb_ft_max_token_size и innodb_ft_min_token_size.

https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html

Вы можете изменить это ограничение, изменив значение в sql .ini

 [mysqld]
 ft_min_word_len = 3

Значение по умолчанию равно 4, и приведенное выше значение изменится на 3. Вы можете изменить ft_max_word_len таким же образом:

 [mysqld]
 ft_max_word_len = 150
...