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を使えるようになりました。
長くなりましたが、以上です。