Spec-Zone .ru
спецификации, руководства, описания, API
|
У полнотекстовой возможности поиска MySQL есть немного настраиваемых пользователем параметров. Можно осуществить больше контроля над полнотекстовым поведением поиска, если у Вас есть исходное распределение MySQL, потому что некоторые изменения требуют модификаций исходного кода. См. Раздел 2.9, "Устанавливая MySQL из Источника".
Отметьте, что полнотекстовый поиск тщательно настраивается для эффективности. Изменение поведения значения по умолчанию в большинстве случаев может фактически уменьшить эффективность. Не изменяйте источники MySQL, если Вы не знаете то, что Вы делаете.
Во время запуска сервера должно быть установлено большинство полнотекстовых переменных, описанных в этом разделе. Перезапуск сервера обязан изменять их; они не могут быть изменены, в то время как сервер работает.
Некоторые переменные изменения требуют, чтобы Вы восстановили FULLTEXT
индексирует
в Ваших таблицах. Инструкции для того, чтобы сделать так даются позже в этом разделе.
Минимальные и максимальные длины слов, которые будут индексированы, определяются innodb_ft_min_token_size
и innodb_ft_max_token_size
для InnoDB
поиск индексирует, и ft_min_word_len
и ft_max_word_len
для MyISAM
. После
изменения любой из этих опций восстановите Ваш FULLTEXT
индексирует для
изменения, чтобы вступить в силу. Например, чтобы сделать двухсимвольные доступные для поиска слова, Вы
могли поместить следующие строки в файл опции:
[mysqld]innodb_ft_min_token_size=2ft_min_word_len=2
Затем перезапустите сервер и восстановите Ваш FULLTEXT
индексирует. Для
MyISAM
таблицы, отметьте особенно комментарии относительно myisamchk
в инструкциях после этого списка.
Чтобы
переопределить значение по умолчанию stopword список, установите ft_stopword_file
системная переменная. (См. Раздел
5.1.4, "Системные Переменные Сервера".) Значение переменной должно быть путем файла,
содержащего список stopword, или пустую строку, чтобы отключить фильтрацию stopword. Сервер ищет файл в
каталоге данных, если абсолютный путь не дается, чтобы определить различный каталог. После изменения
значения этой переменной или содержания stopword файла, перезапустите сервер и восстановите Ваш FULLTEXT
индексирует.
Список stopword является свободной формой, разделяя stopwords с любым небуквенно-цифровым знаком,
таким как новая строка, пространство, или запятая. Исключения являются символом подчеркивания ("_
")
и единственный апостроф ("'
"), которые обрабатываются как часть слова. Набор
символов списка stopword является набором символов значения по умолчанию сервера; см. Раздел 10.1.3.1, "Набор символов
сервера и Сопоставление".
50%-ый порог для поисков естественного языка определяется определенной выбранной
схемой взвешивания. Чтобы отключить это, ищите следующую строку в storage/myisam/ftdefs.h
:
#define GWS_IN_USE GWS_PROB
Изменение, что строка к этому:
#define GWS_IN_USE GWS_FREQ
Затем перекомпилируйте MySQL. Нет никакой потребности восстановить индексирование в этом случае.
Производя это изменение, Вы строго уменьшаете
возможность MySQL обеспечить соответствующие значения уместности для MATCH()
функция. Если бы Вы действительно должны искать такие
общие слова, было бы лучше искать использование IN BOOLEAN MODE
вместо этого, который не наблюдает 50%-ый порог.
Изменить операторы, используемые для булевых полнотекстовых поисков на MyISAM
таблицы, набор ft_boolean_syntax
системная переменная. (InnoDB
не имеет эквивалентной установки.) Эта переменная может быть заменена,
в то время как сервер работает, но Вы должны иметь SUPER
полномочие сделать так. Никакое восстановление не индексирует,
необходимо в этом случае. См. Раздел 5.1.4, "Системные
Переменные Сервера", который описывает управление правил, как установить эту переменную.
Можно изменить набор символов, которые считают символами слова несколькими
способами, как описано в следующем списке. После создания модификации восстановите индексирование для
каждой таблицы, которая содержит любого FULLTEXT
индексирует. Предположите,
что Вы хотите обработать символ дефиса ('-') как символ слова. Используйте один из этих методов:
Измените источник MySQL: В storage/myisam/ftdefs.h
,
см. true_word_char()
и misc_word_char()
макросы. Добавить '-'
одному из тех макросы и перекомпилировали MySQL.
Измените файл набора символов: Это не требует никакой перекомпиляции.
true_word_char()
макрос использует таблицу "символьного типа", чтобы отличить буквы и числа от других символов.., можно отредактировать содержание <ctype><map>
массив в одном из XML-файлов набора символов, чтобы определить это '-'
"буква". Затем используйте данный набор символов для Вашего FULLTEXT
индексирует. Для получения информации о <ctype><map>
выстройте формат, см. Раздел 10.3.1, "Символьные Массивы
Определения".
Добавьте новое сопоставление для набора символов, используемого индексированными столбцами, и измените столбцы, чтобы использовать то сопоставление. Для получения общей информации о добавляющих сопоставлениях, см. Раздел 10.4, "Добавляя Сопоставление к Набору символов". Для примера, определенного для полнотекстовой индексации, см. Раздел 12.9.7, "Добавляя Сопоставление для Полнотекстовой Индексации".
Если Вы изменяете полнотекстовые переменные, которые влияют на индексацию (innodb_ft_min_token_size
, innodb_ft_max_token_size
, innodb_ft_server_stopword_table
, innodb_ft_user_stopword_table
, innodb_ft_enable_stopword
, ft_min_word_len
, ft_max_word_len
, или ft_stopword_file
), или если Вы изменяете stopword файл непосредственно, следует
восстановить Ваш FULLTEXT
индексирует после произведения изменений и перезапуска
сервера. Чтобы восстановить индексирование в этом случае, достаточно сделать a QUICK
работа восстановления:
mysql> REPAIR TABLE tbl_name
QUICK;
Альтернативно, использовать ALTER TABLE
с
DROP INDEX
и ADD INDEX
опции, чтобы отбросить и
воссоздать каждого FULLTEXT
индексировать. В некоторых случаях это может быть
быстрее чем работа восстановления.
Каждая таблица, которая содержит любого FULLTEXT
индексируйте должен быть
восстановлен как только показано. Иначе, запросы для таблицы могут привести к неправильным результатам, и
модификации к таблице заставят сервер рассматривать таблицу как поврежденную и нуждающуюся в восстановлении.
Отметьте, что, если Вы используете myisamchk, чтобы выполнить работу, которая изменяет таблицу,
индексирует (такие как восстановление, или проанализируйте), FULLTEXT
индексирует
восстанавливаются, используя значение по умолчанию полнотекстовые
значения параметра для минимальной длины слова, максимальной длины слова, и stopword файла, если Вы не
определяете иначе. Это может привести к сбою запросов.
Проблема происходит, потому что эти параметры известны только сервером. Они не сохранены в MyISAM
индексные файлы. Чтобы избежать проблемы, если Вы изменили минимальную или
максимальную длину слова или stopword значения файла, используемые сервером, определите то же самое ft_min_word_len
,
ft_max_word_len
, и ft_stopword_file
значения для myisamchk, который Вы используете для mysqld. Например, если Вы установили минимальную длину слова
до 3, можно восстановить таблицу с myisamchk как это:
shell> myisamchk --recover --ft_min_word_len=3 tbl_name
.MYI
Чтобы гарантировать, что myisamchk и сервер используют те же самые значения для
полнотекстовых параметров, разместите каждого в обоих [mysqld]
и [myisamchk]
разделы файла опции:
[mysqld]ft_min_word_len=3[myisamchk]ft_min_word_len=3
Альтернатива использованию myisamchk
для индексирует модификацию, должен использовать REPAIR
TABLE
, ANALYZE TABLE
,
OPTIMIZE TABLE
, или ALTER TABLE
операторы. Эти операторы выполняются сервером, который знает, что
надлежащие полнотекстовые значения параметра используют.