• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 为全文索引添加校验规则

    本节介绍如何使用内置的全文分析器为全文搜索添加新的归类。样本校验规则类似于,latin1_swedish_ci但将'-'字符视为字母而不是标点字符,以便可以将其索引为单词字符。有关添加归类的一般信息,请参见“向字符集添加校验规则”。假定您已阅读并熟悉所涉及的文件。

    要为全文索引添加校验规则,请使用以下过程。此处的说明为简单字符集添加了归类,如“向字符集添加归类”所述,可以使用描述字符集属性的配置文件来创建归类。对于诸如Unicode之类的复杂字符集,请使用描述字符集属性的C源文件创建归类。

    1. 将校验规则添加到Index.xml文件。校验规则ID必须未使用,因此,如果您的系统上已经使用了该ID,请选择一个不同于1000的值。

      <charset name="latin1">
      ...
      <collation name="latin1_fulltext_ci" id="1000"/>
      </charset>
      
    2. 声明文件中校验规则的排序顺序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>
      
    3. 修改中的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 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: 0
      
      mysql> SELECT * FROM t1 WHERE MATCH a AGAINST ('----' IN BOOLEAN MODE);
      +------	+
      | a    	|
      +------	+
      | 	---- 	|
      +------	+
      1 row in set (0.00 sec)