Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

mroongaのインストール/アンインストール時に発行するするクエリと、その用途をまとめて解説

mroongaのプラグインインストール・アンインストールを手動で行いたい方向けのメモ。
MySQLが起ち上がっていない状態で、プラグインをインストールした時にも必要ですね。

更新履歴

2014年1月8日:mroonga-3.07の新機能であるmroonga_escapeのトピックを追加

インストール時に実行しているクエリ

DELETE IGNORE FROM mysql.plugin WHERE name = 'mroonga';
INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';
CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';

アンインストール時に実行しているクエリ

DROP FUNCTION mroonga_snippet;
DROP FUNCTION last_insert_grn_id;
DROP FUNCTION mroonga_command;
UNINSTALL PLUGIN mroonga;
FLUSH TABLES;

インストール時に発行しているクエリの役割

それぞれどんな事をするために発行しているクエリなのかを解説します。

1. MySQLの管理テーブルmysql.pluginよりmroongaの登録を削除

DELETE IGNORE FROM mysql.plugin WHERE name = 'mroonga';

2. MySQLの管理テーブルmysql.pluginにmroongaを登録

INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';

3. INSERTにより割当てられたレコードIDを取得するUDFを登録

mroongaのストレージモードでは、LAST_INSERT_ID()ではなく、last_insert_grn_id()を使用します。

CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so';

4. 文脈付き索引(KWIC)機能を利用するUDFを登録

キーワードと周辺のテキストを検索結果として取得するという実験的機能が利用できます。

CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';

5. groongaコマンドを直接発行するUDFを登録

MySQLから直接発行できないファセット検索といった検索機能の他、
管理系のgroongaコマンドを利用する事が出来ます。
UDFなので、複数行の結果出力が出来ない制約があります。
そのため、ファセット検索の応答など、複数行の場合にはJSON形式でまとめたものを、1行1カラムで出力します。

CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';

6. 全文検索で用いる特殊記号をエスケープするUDFを登録

mroonga-3.07より追加された、全文検索の制御記号をエスケープすることを補助するUDFです。 詳しくは mroonga_escapeを使ってわかりやすい、メンテナンスしやすい検索クエリにする方法 - Qiita [キータ] の記事が参考になります。

CREATE FUNCTION mroonga_escape RETURNS STRING SONAME 'ha_mroonga.so';

Tips

mroongaを利用した登録済みUDF一覧は、以下のクエリで一覧の確認が出来ます。
select * from mysql.func where dl = 'ha_mroonga.so';

インストール済みのmroongaのバージョンは次のクエリで確認出来ます。
show variables like 'mroonga_%';

mysql> show variables like 'mroonga_%';
+------------------------------------+-------------+
| Variable_name                      | Value       |
+------------------------------------+-------------+
| mroonga_database_path_prefix       |             |
| mroonga_default_parser             | TokenBigram |
| mroonga_default_wrapper_engine     |             |
| mroonga_dry_write                  | OFF         |
| mroonga_enable_optimization        | ON          |
| mroonga_libgroonga_version         | 3.0.5       |
| mroonga_log_file                   | groonga.log |
| mroonga_log_level                  | NOTICE      |
| mroonga_match_escalation_threshold | 0           |
| mroonga_version                    | 3.05        |
+------------------------------------+-------------+
10 rows in set (0.00 sec)