12.9.7 Добавление пользовательской сортировки для полнотекстового индексирования
В этом разделе описывается, как добавить пользовательскую сортировку для полнотекстового поиска с использованием встроенного полнотекстового анализатора. Пример сортировки похож на latin1_swedish_ci, но обрабатывает символ '-' как букву, а не как знак препинания, чтобы его можно было индексировать как символ слова. Общая информация о добавлении сортировок приведена в разделе 10.14 «Добавление сортировки к набору символов»; предполагается, что вы его прочитали и знакомы с соответствующими файлами.
Для добавления сортировки для полнотекстового индексирования используйте следующую процедуру. Здесь добавляется сортировка для простого набора символов, который, как обсуждалось в разделе 10.14 «Добавление сортировки к набору символов», может быть создан с помощью файла конфигурации, описывающего свойства набора символов. Для сложного набора символов, такого как Unicode, создавайте сортировки с использованием файлов исходного кода C, описывающих свойства набора символов.
-
Добавьте сортировку в файл
Index.xml. Разрешенный диапазон идентификаторов для пользовательских сортировок приведен в разделе 10.14.2 «Выбор идентификатора сортировки». Идентификатор должен быть неиспользуемым, поэтому выберите значение, отличное от 1025, если этот идентификатор уже используется в вашей системе.<charset name="latin1"> ... <collation name="latin1_fulltext_ci" id="1025"/> </charset>
-
Объявите порядок сортировки для сортировки в файле
latin1.xml. В данном случае порядок можно скопировать изlatin1_swedish_ci:<collation name="latin1_fulltext_ci"> <map> 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF 41 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49 44 4E 4F 4F 4F 4F 5D D7 D8 55 55 55 59 59 DE DF 41 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49 44 4E 4F 4F 4F 4F 5D F7 D8 55 55 55 59 59 DE FF </map> </collation>
-
Измените массив
ctypeв файлеlatin1.xml. Измените значение, соответствующее 0x2D (что является кодом символа'-'), со 10 (знак препинания) на 01 (заглавная буква). В следующем массиве это элемент в четвёртой строке снизу, третье значение справа.<ctype> <map> 00 20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 10 10 10 10 10 10 10 10 10 10 10 10
0110 10 84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10 10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10 10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20 10 00 10 02 10 10 10 10 10 10 01 10 01 00 01 00 00 10 10 10 10 10 10 10 10 10 02 10 02 00 02 01 48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 10 02 02 02 02 02 02 02 02 </map> </ctype> Перезапустите сервер.
-
Для использования новой сортировки, включите ее в определение столбцов, которые должны ее использовать:
mysql>
DROP TABLE IF EXISTS t1;Query OK, 0 rows affected (0.13 sec) mysql>CREATE TABLE t1 (a TEXT CHARACTER SET latin1 COLLATE latin1_fulltext_ci,FULLTEXT INDEX(a)) ENGINE=InnoDB;Query OK, 0 rows affected (0.47 sec) -
Проверьте сортировку, чтобы убедиться, что дефис рассматривается как символ слова:
mysql>
INSERT INTO t1 VALUEs ('----'),('....'),('abcd');Query OK, 3 rows affected (0.22 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM t1 WHERE MATCH a AGAINST ('----' IN BOOLEAN MODE);+------+ | a | +------+ | ---- | +------+ 1 row in set (0.00 sec)
© 2025 Oracle
Licensed under the GPLv2 License.