Тонка настройка повнотекстового пошуку MySQL - HTML, CSS, JavaScript, Perl, PHP, MySQL
Тонка настройка повнотекстового пошуку MySQL
Засіб повнотекстового пошуку MySQL поки що має лише кілька параметрів, що настроюються користувачем, незважаючи на те, що завдання додавання нових володіє високим пріоритетом у планах того, що має бути нами зроблено. Ви можете отримати більший контроль за поведінкою повнотекстового пошуку, якщо у вас є вихідний дистрибутив MySQL, тому що деякі зміни вимагають модифікації вихідного коду.
Зазначимо, що повнотекстовий пошук ретельно налаштований для забезпечення найкращої ефективності. Модифікація поведінки за умовчанням може лише погіршити результат. Не змінюйте вихідних текстів MySQL, якщо ви точно не знаєте, що робите! Більшість змінних, що стосуються повнотекстового пошуку, і описаних нижче, можуть бути встановлені під час запуску сервера. Щоб змінити ці змінні, потрібно перезапуск сервера; динамічної модифікації під час роботи сервера не передбачено. Деякі зміни змінних вимагають перебудови FULLTEXT-індексів ваших таблиць. Інструкції наведено в кінці цього розділу.
- Мінімальна та максимальна довжина слів, що підлягають індексації, визначається системними змінними ft_min_word__len та ft_max_word_ len (доступними, починаючи з версії MySQL 4.0.0). Мінімальне значення за промовчанням – чотири символи. Максимум за замовчуванням залежить від версії MySQL. Якщо ви змінюєте будь-яке з цих значень, повинні перебудувати свої FULLTEXT-індекси. Наприклад, якщо ви хочете, щоб можна було шукати трисимвольні слова, можете змінити значення змінної ft_min_word_len, помістивши наступні рядки у файл опцій:
- Щоб перевизначити список стоп-слів за промовчанням, установіть системну змінну ft_stopword_file (застосовується починаючи з MySQL 4.0.10). Значенням змінної має бути повний шлях до файлу, що містить список стоп слів, або порожній рядок, якщо потрібно вимкнути фільтрацію за стоп-словами. Після зміни цієї змінної перебудуйте існуючі індекси FULLTEXT.
- 50% поріг для природного мовного пошуку визначається вибором певної схеми "вагових співвідношень". Щоб вимкнути її, знайдіть у файлі myisam/ftdefs.h наступний рядок:
#define GWS_IN_USE GWS_PROB Змініть її таким чином: tdefine 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 ім'я_таблиці.Ш1 Щобгарантувати, що myisamchk і сервер використовують ті ж значення параметрів повнотекстового пошуку, можна помістити кожен з них в обидва розділи [mysqld] та [mysqlchk] файлу опцій. [mysqld] f t_min_word_len=3 [myisamchk] f t_m in_word_len=3 Альтернативою застосування myisamchk є оператори REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE або ALTER TABLE. Ці оператори виконуються сервером, якому відомі правильні значення параметрів повнотекстового пошуку.