Как MySQL будет использовать индекс FT при поиске с помощью оператора звездочки (подстановочного знака)? - PullRequest
0 голосов
/ 19 сентября 2018

По сути, у меня есть огромная таблица (~ 30 м записей), у которой индекс fulltext находится в одном из столбцов.

Поисковый запрос выглядит так:

... WHERE MATCH(body) AGAINST('+Hello +my*' IN BOOLEAN MODE) ...

Myмеханизм хранения - InnoDB, поэтому у нас есть некоторые ограничения:

  • Минимальная длина слова составляет 3 символа.

Однако в документации сказано следующее:

Если слово указано с помощью оператора усечения, оно не удаляется из логического запроса, даже если оно слишком короткое (как определено в настройке ft_min_word_len) или стоп-слово.Это происходит потому, что слово рассматривается не как слишком короткое или стоп-слово, а как префикс, который должен присутствовать в документе в форме слова, начинающегося с префикса.Предположим, что ft_min_word_len = 4.

Вопрос: Как MySQL будет использовать FT-индекс в таких случаях?Слово bae не должно присутствовать ни в одном индексе, поскольку оно не соответствует требованию минимальной длины слова.Может быть, такие запросы будут немного медленнее?

1 Ответ

0 голосов
/ 19 сентября 2018

Запрос может быть немного медленнее, но не в результате ваших рассуждений.

Настройка минимальной длины слова также используется при создании индекса, поэтому innodb не будет индексировать слова, которые короче минимальногодлина слова.

Во время выполнения полнотекстового поиска innodb снова проверяет длину слов, по которым производится поиск, по минимальному пределу длины слова и удаляет слова, которые короче ограничения, так как они не могут быть найдены в индексе.,Таким образом, если бы у вас был критерий поиска 'my' (обратите внимание на отсутствие звездочки), это было бы проигнорировано innodb.

Однако, когда вы используете подстановочный оператор с числом символов, которые меньшечем предел (например, ваш my*, который имеет только два символа), они все еще включаются в поиск, потому что innodb будет смотреть на шаблон, а не только на слово.

Очевидно, проверка на полное соответствиетолько быстрее, чем проверка на полное совпадение и начало слова, но не будет существенной разницы в скорости.

...