MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  全文インデックス付けのためのユーザー定義照合の追加

12.10.7 全文インデックス付けのためのユーザー定義照合の追加

このセクションでは、組込み全文パーサーを使用して全文検索用のユーザー定義照合を追加する方法について説明します。 サンプルの照合順序は latin1_swedish_ci と似ていますが、'-' 文字は、単語文字としてインデックスを付けることができるように、句読文字としてではなく英字として処理されます。 照合順序の追加に関する一般的な情報については、セクション10.14「文字セットへの照合順序の追加」で説明されています。この情報を参照し、関与するファイルをよく理解することが前提となっています。

全文インデックス付けの照合を追加するには、次の手順を使用します。 ここで説明する手順では、セクション10.14「文字セットへの照合順序の追加」 で説明されているように、文字セットプロパティを記述する構成ファイルを使用して、単純な文字セットの照合順序を作成できます。 Unicode などの複雑な文字セットの場合は、文字セットプロパティを記述する C ソースファイルを使用して照合を作成します。

  1. 照合順序を Index.xml ファイルに追加します。 ユーザー定義照合に許可される ID の範囲は、セクション10.14.2「照合順序 ID の選択」 で指定されます。 ID は未使用である必要があるため、その ID がシステムですでに使用されている場合は 1025 以外の値を選択してください。

    <charset name="latin1">
    ...
    <collation name="latin1_fulltext_ci" id="1025"/>
    </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. latin1.xmlctype 配列を変更します。 0x2D ('-'文字のコード) に対応する値を 10 (句読点) から 01 (大文字) に変更します。 次の配列では、これは 4 行目の要素で、最後から 3 番目の値です。

    <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)

関連キーワード:  関数, 照合, 順序, 文字, 空間, 追加, セット, 全文, 定義, ユーザー