組込みの 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-ipadic
は
にあります。
MYSQL_HOME
/lib/mecab
MeCab パーサープラグインをインストールおよび構成するには、次のステップを実行します:
-
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「オプションファイルの使用」 を参照してください。
-
また、MySQL 構成ファイルで、最小トークンサイズを 1 または 2 に設定します。これは、MeCab パーサーで使用することをお薦めします。
InnoDB
テーブルの場合、最小トークンサイズはinnodb_ft_min_token_size
構成オプションによって定義され、デフォルト値は 3 です。MyISAM
テーブルの場合、最小トークンサイズはft_min_word_len
によって定義され、デフォルト値は 4 です。[mysqld] innodb_ft_min_token_size=1
-
mecabrc
構成ファイルを変更して、使用するディクショナリを指定します。 MySQL バイナリとともに配布されるmecab-ipadic
パッケージには、3 つのディクショナリ (ipadic_euc-jp
、ipadic_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
ディクショナリは、utf8
とutf8mb4
の両方をサポートしています。このディクショナリが使用されている場合、mecab_charset
は常にutf8
をレポートします。 MySQL を再開します。
-
MeCab パーサーのプラグインをインストールします:
MeCab パーサープラグインは、
INSTALL PLUGIN
構文を使用してインストールされます。 プラグイン名はmecab
で、共有ライブラリ名はlibpluginmecab.so
です。 プラグインのインストールの詳細は、セクション5.6.1「プラグインのインストールおよびアンインストール」 を参照してください。INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
インストールされると、MeCab パーサープラグインは通常の MySQL の再起動のたびにロードされます。
-
SHOW PLUGINS
ステートメントを使用して、MeCab パーサープラグインがロードされていることを確認します。mysql> SHOW PLUGINS;
mecab
プラグインがプラグインのリストに表示されます。
MeCab パーサーを使用する FULLTEXT インデックスの作成
mecab パーサーを使用する FULLTEXT
インデックスを作成するには、CREATE TABLE
、ALTER 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 のドキュメントを参照してください。
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
です。-
mecab
をインストールします:tar zxfv mecab-0.996.tar cd mecab-0.996 ./configure make make check su make install
-
mecab-ipadic
をインストールします:tar zxfv mecab-ipadic-2.7.0-20070801.tar cd mecab-ipadic-2.7.0-20070801 ./configure make su make install
-
WITH_MECAB
CMake オプションを使用して MySQL をコンパイルします。mecab
およびmecab-ipadic
をデフォルトの場所にインストールした場合は、WITH_MECAB
オプションをsystem
に設定します。-DWITH_MECAB=system
カスタムインストールディレクトリを定義した場合は、
WITH_MECAB
をカスタムディレクトリに設定します。 例:-DWITH_MECAB=/path/to/mecab