您的位置:首页 > 娱乐 > 八卦 > 【MySQL精通之路】全文搜索(7)-全文索引-添加用户定义的排序规则

【MySQL精通之路】全文搜索(7)-全文索引-添加用户定义的排序规则

2024/10/6 18:34:37 来源:https://blog.csdn.net/qq_29519041/article/details/139250354  浏览:    关键词:【MySQL精通之路】全文搜索(7)-全文索引-添加用户定义的排序规则

 主博客:

【MySQL精通之路】全文搜索功能-CSDN博客


警告

不推荐使用用户定义的排序规则;

在MySQL的未来版本中将删除对它们的支持。
从MySQL 8.0.33开始,服务器会对SQL语句中使用COLLATE user_defined_collection发出警告;
当服务器启动时,“--collocation-server”设置为 等于用户定义的排序规则的名称时,也会发出警告。

 本节介绍如何使用内置全文分析器为全文搜索添加用户定义的排序规则

示例排序规则类似于latin_swedish_ci,但将“-”字符视为字母而非标点符号,以便将其作为单词字符进行索引。

“向字符集添加排序规则”提供了有关添加排序规则的一般信息;

假设您已经阅读并熟悉所涉及的内容。

要为全文索引添加排序规则,请使用以下过程。

此处的说明为简单字符集添加排序规则,“将排序规则添加到字符集”中所述,可以使用描述字符集属性的配置文件创建。对于复杂的字符集(如Unicode),请使用描述字符集属性的C源文件创建排序规则。


1.将排序规则添加到Index.xml文件中。用户定义排序规则允许的ID范围见第12.14.2节“选择排序规则ID”。该ID必须未使用,因此如果该ID已在您的系统中使用,请选择一个不同于1025的值。

<charset name="latin1">
...
<collation name="latin1_fulltext_ci" id="1025"/>
</charset>

2.在latin1.xml文件中声明排序规则的排序顺序。在这种情况下,可以从latin_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>

 3.修改latin1.xml中的ctype数组。将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 01 10 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>

4.重新启动服务器。

5.要使用新的排序规则,请将其包含在要使用的列的定义中:

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)

6.测试排序规则以验证连字符是否被视为单词字符:

mysql> INSERT INTO t1 VALUEs ('----'),('....'),('abcd');
Query OK, 3 rows affected (0.22 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> SELECT * FROM t1 WHERE MATCH a AGAINST ('----' IN BOOLEAN MODE);
+------+
| a    |
+------+
| ---- |
+------+
1 row in set (0.00 sec)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com