MariaDBにMroongaはバンドルされていますが、
TokenizerとしてMecabを使う際は、少し注意が必要です。
公式には、以下のように書かれていますが、手順を残しておきます。
https://mariadb.com/kb/en/library/mroonga-overview/
「Tokenise using MeCab. Required Groonga to be buillt with MeCab support.」
なお、OSはCentOS7、MariaDBのバージョンは、10.3.8です。
まずは、バンドルされているMroongaのインストールを見ていきます。
公式(https://mariadb.com/kb/en/library/about-mroonga/)を参考にしています。
1.プラグインのインストール
MariaDB [(none)]> INSTALL SONAME 'ha_mroonga';
2.Mroongaのインストール確認
MariaDB [(none)]> show engines;
+--------------------+---------+-----------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-----------------------------------------+--------------+------+------------+
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
:(省略)
| Mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO |
:(省略)
+--------------------+---------+-----------------------------------------+--------------+------+------------+
3.UDFの作成
公式(https://mariadb.com/kb/en/library/creating-mroonga-user-defined-functions/)より引用。
4.プラグインの確認
MariaDB [(none)]> show plugins;
+-------------------------------+----------+--------------------+---------------+---------+
| Name | Status | Type | Library | License |
+-------------------------------+----------+--------------------+---------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
:(省略)
| Mroonga | ACTIVE | STORAGE ENGINE | ha_mroonga.so | GPL |
| Mroonga_stats | ACTIVE | INFORMATION SCHEMA | ha_mroonga.so | GPL |
+-------------------------------+----------+--------------------+---------------+---------+
5.Tokenizerの確認
MariaDB [(none)]> select json_detailed(mroonga_command("tokenize TokenBigram '東京都'"));
+----------------------------------------------------------------+
| json_detailed(mroonga_command("tokenize TokenBigram '東京都'")) |
+----------------------------------------------------------------+
| [
{
"value": "東京",
"position": 0,
"force_prefix": false
},
{
"value": "京都",
"position": 1,
"force_prefix": false
},
{
"value": "都",
"position": 2,
"force_prefix": false
}
] |
+----------------------------------------------------------------+
MariaDB [(none)]> select json_detailed(mroonga_command("tokenize TokenMecab '東京都'"));
ERROR 1026 (HY000): [tokenize] nonexistent tokenizer
TokenBigramは使えるが、TokenMecabは使えない。。。
このように、公式にバンドルされているMroongaではMecabが使えないので、
Groongaレポジトリから取得するMroongaを使うには、
一旦削除しておく必要があります。
MariaDB [(none)]> UNINSTALL SONAME 'ha_mroonga';
ここからGroongaレポジトリからもろもろ取得し、設定していきます。
主な設定方法は、以下の公式ページに記載されています。
http://mroonga.org/ja/docs/install/centos.html#centos-7-with-mariadb-10-3-package
1.レポジトリのインストール
# yum install -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm
2.Mroonga関連インストール
# yum install -y --enablerepo=epel mecab mecab-devel groonga groonga-tokenizer-mecab mariadb-10.3-mroonga
※依存関係により、この時点でMariaDB-Serverのバージョンが上がる可能性あるため、mysql_upgradeを適宜実行する。
3.Mecabの確認
$ mecab -D
filename: /usr/lib64/mecab/dic/ipadic/sys.dic
version: 102
charset: utf8
type: 0
size: 392126
left size: 1316
right size: 131
$ echo '東京都' | mecab
東京 名詞,固有名詞,地域,一般,,,東京,トウキョウ,トーキョー
都 名詞,接尾,地域,,,*,都,ト,ト
EOS
4.Groongaの確認
$ groonga --version | head -1
Groonga 8.0.9 [linux-gnu,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,msgpack,mruby,onigmo,zlib,lz4,zstd,epoll]
ここまでで、Mecabが無事動作し、Groongaからも認識されていればOK。
5.Mroongaプラグインをインストール
MariaDB [(none)]> source /usr/share/mroonga/install.sql;
上記コマンドで、Groonga提供のMroongaライブラリがインストールされ、UDFも上書きされます。
6.プラグインの状態確認
MariaDB [(none)]> show plugins;
+-------------------------------+----------+--------------------+------------------------+---------+
| Name | Status | Type | Library | License |
+-------------------------------+----------+--------------------+------------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
:
| Mroonga | ACTIVE | STORAGE ENGINE | ha_mroonga_official.so | GPL |
+-------------------------------+----------+--------------------+------------------------+---------+
お、共有ライブラリの名称が「ha_mroonga.so」から「ha_mroonga_official.so」に変わっていますね。
7.Mecabの実行確認
MariaDB [(none)]> select json_detailed(mroonga_command("tokenize TokenMecab '東京都'"));
+---------------------------------------------------------------+
| json_detailed(mroonga_command("tokenize TokenMecab '東京都'")) |
+---------------------------------------------------------------+
| [
{
"value": "東京",
"position": 0,
"force_prefix": false,
"force_prefix_search": false
},
{
"value": "都",
"position": 1,
"force_prefix": false,
"force_prefix_search": false
}
] |
+---------------------------------------------------------------+
おおー、無事にMariaDBからMecabを使えるようになりました。
長くなりましたが、以上です。