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を使えるようになりました。

長くなりましたが、以上です。


コメントがあればどうぞ


CAPTCHA Image
Reload Image