Сети : Тонкая настройка полнотекстового поиска MySQL

Средство полнотекстового поиска MySQL пока имеет только несколько настраиваемых пользователем параметров, несмотря на то, что задача добавления новых обладает высоким приоритетом в планах того, что должно быть нами сделано. Вы можете получить больший контроль над поведением полнотекстового поиска, если у вас есть исходный дистрибутив MySQL, потому что некоторые изменения требуют модификации исходного кода.

Отметим, что полнотекстовый поиск был тщательно настроен для обеспечения наилучшей эффективности. Модификация поведения по умолчанию может в большинстве случаев только ухудшить результат. Не изменяйте исходных текстов MySQL, если только вы точно не знаете, что делаете!
Большинство переменных, имеющих отношение к полнотекстовому поиску, и описанных ниже, могут быть установлены во время запуска сервера. Для того чтобы изменить эти переменные, требуется перезапуск сервера; динамическая модификация во время работы сервера не предусмотрена.
Некоторые изменения переменных требуют перестройки FULLTEXT-индексов ваших таблиц. Инструкции приведены в конце настоящего раздела.


   * Минимальная и максимальная длина слов, подлежащих индексации, определяется системными переменными ft_min_word_len и ft_max_word_len (доступными, начиная с версии MySQL 4.0.0). Минимальное значение по умолчанию - четыре символа. Максимум по умолчанию зависит от вашей версии MySQL. Если вы изменяете любое из этих значений, то должны перестроить свои FULLTEXT-индексы. Например, если выхотите, чтобы можно было искать трёх символьные слова, то можете изменить значение переменной ft_min_word_len, поместив следующие строки в файл опций:
[mysqld] ft_min_word_len=3


Затем перезапустите сервер и перестройте существующие FULLTEXT-индексы. Обратите особое внимание на примечания относительно myisamchk в инструкциях, следующих за настоящим списком.

  1. Чтобы переопределить список стоп-слов по умолчанию, установите системную переменную ft_stopword_file (применяется, начиная с MySQL 4.0.10). Значением переменной должен быть полный путь к файлу, содержащему список стоп слов, либо пустая строка, если надо отключить фильтрацию по стоп-словам. После изменения этой переменной перестройте существующие FULLTEXT-индексы.
  2. 50%-ный порог для естественного языкового поиска определяется выбором определённой схемы "весовых соотношений". Чтобы отключить её, найдите в файле myisam/ftdefs.h следующую строку:
#define GWS_IN_USE GWS_PROB
Измените ее следующим образом:
#define GWS_IN_USE GWS_FREQ


Затем перекомпилируйте MySQL. В этом случае перестраивать индексы не потребуется.

На заметку!
Сделав это, вы значительно снизите способность MySQL присваивать строкам адекватные релевантные значения функцией MATCH (). Если вам действительно нужно выполнять поиск по таким часто употребляемым словам, будет лучше вместо этого применить поиск с IN BOOLEAN MODE, который не обращает внимания на 50%-ный порог.

* Чтобы изменить операции, применяемые для булевского полнотекстового поиска,установите системную переменную ft_boolean_syntax (доступна, начиная с MySQL 4.0.1). Эта переменная также может быть изменена на работающем сервере, но вы должны иметь привилегию SUPER для того, чтобы сделать это. Перестраивать индексы не нужно.

Если вы модифицируете полнотекстовые переменные, которые затрагивают индексацию (ft_min_word_len, ft_max_word_len или ft_stopword_file), то после внесения изменений должны перестроить все свои FULLTEXT-индексы и перезапустить сервер. Чтобы перестроить индексы в этом случае, достаточно выполнить операцию быстрого восстановления таблицы:
mysql> REPAIR TABLE имя_таблицы QUICK;


Специально в связи с использованием средства IN BOOLEAN MODE, если вы обновляете сервер MySQL 3.23 до версии 4.0 или выше, также необходимо заменить заголовок индекса. Чтобы сделать это, выполните следующее:
mysql> REPAIR TABLE имя_таблицы USE_FRM;


Это необходимо потому, что булевский полнотекстовый поиск требует наличия флага в заголовке индекса, которого не было в MySQL 3.23, и который не добавляется, если вы осуществляете только восстановление QUICK. При попытке выполнить булевский полнотекстовый поиск без такой перестройки индексов, он вернет некорректный результат.
Отметим, что если вы используете myisamchk для операции, которая модифицирует индексы (такой как анализ или восстановление), FULLTEXT-индексы перестраиваются с использованием значений по умолчанию для параметров минимальной и максимальной длины слова, а также файла стоп-слов на сервере, если вы не укажете другого. Это может приводить к аварийному завершению запросов.

Проблема возникает из-за того, что эти параметры известны только серверу. Они не сохраняются в индексных файлах MyISAM. Чтобы избежать проблем, когда вы модифицируете длину минимального и максимального слова или файл стоп-слов на сервере, нужно указывать те же значения ft_min_word_len, ft_max_word_len и ft_stopword_file программе myisamchk, что используются в mysqld. Например, если минимальная длина слова установлена в 3 символа, вы можете восстановить таблицу с помощью myisamchk следующим образом:
shell> myisamchk -recover -ft_min_word_len=3 имя_таблицы


Чтобы гарантировать, что myisamchk и сервер используют те же значения параметров полнотекстового поиска, можно поместить каждый из них в оба раздела [mysqld] и [mysqlchk] файла опций.
[mysqld]
ft_min_word_len=3
[myisamchk]
ft_min_word_len=3


Альтернативой применению myisamchk являются операторы REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE или ALTER TABLE. Эти операторы выполняются сервером, которо­му известны правильные значения параметров полнотекстового поиска.


Вы только посетили наш сайт, КОММЕНТИРОВАНИЕ будет доступно через несколько минут.
возможно у Вас отключен javascript, если включен - просто обновите страницу