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


MySQL 8.0 リファレンスマニュアル  /  ...  /  MeCab フルテキストパーサープラグイン

12.10.9 MeCab フルテキストパーサープラグイン

組込みの MySQL 全文パーサーは、単語間の空白をデリミタとして使用して、単語の開始位置と終了位置を決定します。これは、単語デリミタを使用しない表意文字言語を使用する場合の制限です。 日本語のこの制限に対処するために、MySQL には MeCab 全文パーサープラグインが用意されています。 MeCab 全文パーサープラグインは、InnoDB および MyISAM での使用がサポートされています。

注記

MySQL には、日本語をサポートする ngram 全文パーサープラグインも用意されています。 詳細は、セクション12.10.8「ngram 全文パーサー」を参照してください。

MeCab 全文パーサープラグインは、一連のテキストを意味のある単語にトークン化する日本語の全文パーサープラグインです。 たとえば、MeCab は、データベース管理 (「データベース管理」) をデータベース (「データベース」) および管理 (「管理」) にトークン化します。 比較すると、ngram 全文パーサーは、テキストを連続した一連の n 文字にトークン化します。ここで、n は 1 から 10 までの数値を表します。

テキストを意味のある単語にトークン化するだけでなく、MeCab インデックスは通常 ngram インデックスよりも小さく、MeCab 全文検索は一般的に高速です。 欠点は、ngram 全文パーサーに比べて、MeCab 全文パーサーがドキュメントをトークン化するのに時間がかかることです。

セクション12.10「全文検索関数」 で説明されている全文検索構文は、MeCab パーサープラグインに適用されます。 このセクションでは、解析動作の違いについて説明します。 全文関連の構成オプションも適用できます。

MeCab パーサーの詳細は、Github の「MeCab : 他の品詞/形態アナライザ」プロジェクトを参照してください。

MeCab パーサープラグインのインストール

MeCab パーサープラグインには、mecab および mecab-ipadic が必要です。

サポートされている Fedora、Debian および Ubuntu プラットフォーム (システム mecab バージョンが古すぎる Ubuntu 12.04 を除く) では、MySQL はシステム mecab インストールがデフォルトの場所にインストールされている場合に、そのインストールに動的にリンクします。 サポートされている他の Unix に似たプラットフォームでは、libmecab.so は MySQL プラグインディレクトリにある libpluginmecab.so で静的にリンクされます。mecab-ipadic は MySQL バイナリに含まれており、MYSQL_HOME\lib\mecab にあります。

ネイティブパッケージ管理ユーティリティ (Fedora、Debian および Ubuntu 上) を使用して mecab および mecab-ipadic をインストールするか、ソースから mecab および mecab-ipadic をビルドできます。 ネイティブパッケージ管理ユーティリティを使用した mecab および mecab-ipadic のインストールの詳細は、Installing MeCab From a Binary Distribution (Optional) を参照してください。 ソースから mecab および mecab-ipadic をビルドする場合は、Building MeCab From Source (Optional) を参照してください。

Windows では、libmecab.dll は MySQL bin ディレクトリにあります。mecab-ipadicMYSQL_HOME/lib/mecab にあります。

MeCab パーサープラグインをインストールおよび構成するには、次のステップを実行します:

  1. MySQL 構成ファイルで、mecab_rc_file 構成オプションを、MeCab の構成ファイルである mecabrc 構成ファイルの場所に設定します。 MySQL とともに配布される MeCab パッケージを使用している場合、mecabrc ファイルは MYSQL_HOME/lib/mecab/etc/にあります。

    [mysqld]
    loose-mecab-rc-file=MYSQL_HOME/lib/mecab/etc/mecabrc

    loose 接頭辞は option modifier です。 mecab_rc_file オプションは、MeCaB パーサープラグインがインストールされるまで MySQL によって認識されませんが、MeCaB パーサープラグインをインストールする前に設定する必要があります。 loose 接頭辞を使用すると、認識されない変数が原因でエラーが発生することなく MySQL を再起動できます。

    独自の MeCab インストールを使用する場合、またはソースから MeCab をビルドする場合、mecabrc 構成ファイルの場所が異なる可能性があります。

    MySQL 構成ファイルとその場所の詳細は、セクション4.2.2.2「オプションファイルの使用」 を参照してください。

  2. また、MySQL 構成ファイルで、最小トークンサイズを 1 または 2 に設定します。これは、MeCab パーサーで使用することをお薦めします。 InnoDB テーブルの場合、最小トークンサイズは innodb_ft_min_token_size 構成オプションによって定義され、デフォルト値は 3 です。 MyISAM テーブルの場合、最小トークンサイズは ft_min_word_len によって定義され、デフォルト値は 4 です。

    [mysqld]
    innodb_ft_min_token_size=1
  3. mecabrc 構成ファイルを変更して、使用するディクショナリを指定します。 MySQL バイナリとともに配布される mecab-ipadic パッケージには、3 つのディクショナリ (ipadic_euc-jpipadic_sjis および ipadic_utf-8) が含まれます。 MySQL とともにパッケージ化された mecabrc 構成ファイルには、次のようなエントリが含まれています:

    dicdir =  /path/to/mysql/lib/mecab/lib/mecab/dic/ipadic_euc-jp

    たとえば、ipadic_utf-8 ディクショナリを使用するには、次のようにエントリを変更します:

    dicdir=MYSQL_HOME/lib/mecab/dic/ipadic_utf-8

    独自の MeCab インストールを使用している場合、またはソースから MeCab をビルドしている場合、mecabrc ファイルのデフォルトの dicdir エントリはディクショナリとその場所とは異なる可能性があります。

    注記

    MeCab パーサープラグインのインストール後、mecab_charset ステータス変数を使用して、MeCab で使用される文字セットを表示できます。 MySQL バイナリで提供される 3 つの MeCab ディクショナリでは、次の文字セットがサポートされます。

    • ipadic_euc-jp ディクショナリは、ujis および eucjpms 文字セットをサポートしています。

    • ipadic_sjis ディクショナリは、sjis および cp932 文字セットをサポートしています。

    • ipadic_utf-8 ディクショナリは、utf8 および utf8mb4 文字セットをサポートしています。

    mecab_charset では、最初にサポートされている文字セットのみがレポートされます。 たとえば、ipadic_utf-8 ディクショナリは、utf8utf8mb4 の両方をサポートしています。このディクショナリが使用されている場合、mecab_charset は常に utf8 をレポートします。

  4. MySQL を再開します。

  5. MeCab パーサーのプラグインをインストールします:

    MeCab パーサープラグインは、INSTALL PLUGIN 構文を使用してインストールされます。 プラグイン名は mecab で、共有ライブラリ名は libpluginmecab.so です。 プラグインのインストールの詳細は、セクション5.6.1「プラグインのインストールおよびアンインストール」 を参照してください。

    INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';

    インストールされると、MeCab パーサープラグインは通常の MySQL の再起動のたびにロードされます。

  6. SHOW PLUGINS ステートメントを使用して、MeCab パーサープラグインがロードされていることを確認します。

    mysql> SHOW PLUGINS;

    mecab プラグインがプラグインのリストに表示されます。

MeCab パーサーを使用する FULLTEXT インデックスの作成

mecab パーサーを使用する FULLTEXT インデックスを作成するには、CREATE TABLEALTER TABLE または CREATE INDEX とともに WITH PARSER ngram を指定します。

この例では、mecab FULLTEXT インデックスを使用したテーブルの作成、サンプルデータの挿入および INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE テーブルでのトークン化されたデータの表示を示します:

mysql> USE test;

mysql> CREATE TABLE articles (
      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title VARCHAR(200),
      body TEXT,
      FULLTEXT (title,body) WITH PARSER mecab
    ) ENGINE=InnoDB CHARACTER SET utf8;

mysql> SET NAMES utf8;

mysql> INSERT INTO articles (title,body) VALUES
    ('データベース管理','このチュートリアルでは、私はどのようにデータベースを管理する方法を紹介します'),
    ('データベースアプリケーション開発','データベースアプリケーションを開発することを学ぶ');

mysql> SET GLOBAL innodb_ft_aux_table="test/articles";

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;

既存のテーブルに FULLTEXT インデックスを追加するには、ALTER TABLE または CREATE INDEX を使用できます。 例:

CREATE TABLE articles (
      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title VARCHAR(200),
      body TEXT
     ) ENGINE=InnoDB CHARACTER SET utf8;

ALTER TABLE articles ADD FULLTEXT INDEX ft_index (title,body) WITH PARSER mecab;

# Or:

CREATE FULLTEXT INDEX ft_index ON articles (title,body) WITH PARSER mecab;

MeCab パーサーの領域処理

MeCab パーサーは、クエリー文字列のセパレータとして空白を使用します。 たとえば、MeCab パーサーは、「データベース管理」「データベース」および「管理」としてトークン化します。

MeCab パーサーのストップワード処理

デフォルトでは、MeCab パーサーは、英語のストップワードの短いリストを含むデフォルトのストップワードリストを使用します。 日本語に適用可能なストップワードリストの場合は、独自のストップワードリストを作成する必要があります。 ストップワードリストの作成の詳細は、セクション12.10.4「全文ストップワード」 を参照してください。

MeCab パーサー用語検索

自然言語モードの検索では、検索語はトークンの和集合に変換されます。 たとえば、「データベース管理」「データベース管理」に変換されます。

SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('データベース管理' IN NATURAL LANGUAGE MODE);

ブールモード検索の場合、検索語は検索フレーズに変換されます。 たとえば、「データベース管理」「データベース管理」に変換されます。

SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('データベース管理' IN BOOLEAN MODE);

MeCab パーサーのワイルドカード検索

ワイルドカード検索語はトークン化されません。 「データベース管理 *」での検索は、接頭辞「データベース管理」に対して実行されます。

SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);

MeCab パーサーフレーズ検索

フレーズはトークン化されます。 たとえば、「データベース管理」「データベース管理」としてトークン化されます。

SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('"データベース管理"' IN BOOLEAN MODE);

バイナリ配布からの MeCab のインストール (オプション)

このセクションでは、ネイティブパッケージ管理ユーティリティを使用してバイナリ配布から mecab および mecab-ipadic をインストールする方法について説明します。 たとえば、Fedora では、Yum を使用してインストールを実行できます:

yum mecab-devel

Debian または Ubuntu では、APT インストールを実行できます:

apt-get install mecab
apt-get install mecab-ipadic

ソースからの MeCab のインストール (オプション)

ソースから mecab および mecab-ipadic をビルドする場合、基本的なインストールステップは次のとおりです。 詳細は、MeCab のドキュメントを参照してください。

  1. mecab および mecab-ipadic 用の tar.gz パッケージを http://taku910.github.io/mecab/#download からダウンロードします。 2016 年 2 月現在、使用可能な最新のパッケージは mecab-0.996.tar.gz および mecab-ipadic-2.7.0-20070801.tar.gz です。

  2. mecab をインストールします:

    tar zxfv mecab-0.996.tar
    cd mecab-0.996
    ./configure
    make
    make check
    su
    make install
  3. mecab-ipadic をインストールします:

    tar zxfv mecab-ipadic-2.7.0-20070801.tar
    cd mecab-ipadic-2.7.0-20070801
    ./configure
    make
    su
    make install
  4. WITH_MECAB CMake オプションを使用して MySQL をコンパイルします。 mecab および mecab-ipadic をデフォルトの場所にインストールした場合は、WITH_MECAB オプションを system に設定します。

    -DWITH_MECAB=system

    カスタムインストールディレクトリを定義した場合は、WITH_MECAB をカスタムディレクトリに設定します。 例:

    -DWITH_MECAB=/path/to/mecab

関連キーワード:  関数, インストール, 管理, データベース, パーサー, 全文, パーサープラグイン, 構成, 空間, 検索