Mroongaブログ

2017-10-29

Mroonga 7.08リリース!

Mroonga 7.08 をリリースしました!

変更点

今月の変更点は以下の通りです。

  • Mroongaでテーブルを作成する際に、Groongaのテーブルフラグを指定できるようになりました
  • Ubuntu 17.10 (Artful Aardvark) をサポートしました

Mroongaでテーブルを作成する際に、Groongaのテーブルフラグを指定できるようになりました

いままでは、Mroongaで CREATE_TABLE する際に、Groongaのテーブルフラグを指定することが出来ませんでした。 そのため、大きなキーを大量に保存するテーブルを作成するためには、 mroonga_command を使って、Groongaの table_create コマンドを呼び出す必要がありGroongaに詳しくない人にとって、大きなキーを大量に保存するテーブルを作成するのは、難しい作業でした。 今回のリリースでは、Mroongaでテーブルを作成する際に、 KEY_LARGE フラグを指定出来るようになりました。CREATE_TABLE 時に KEY_LARGE を指定することでGroongaのコマンドを知らなくても、大きなキーを大量に保存するテーブルを作成出来るようになりました。

KEY_LARGE の指定方法は以下の通りです。

CREATE TABLE diaries (
  id INT PRIMARY KEY AUTO_INCREMENT,
  content VARCHAR(255),
  FULLTEXT INDEX (content)
) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET utf8 flags "TABLE_HASH_KEY|KEY_LARGE";

flags に指定できる各フラグの詳細はGroonga v7.0.8ドキュメント - 7.3.59.4.2.1.flagsを確認してください。

Ubuntu 17.10 (Artful Aardvark) をサポートしました

今回のリリースでは、今月リリースされたばかりのUbuntu 17.10 (Artful Aardvark) をサポートしました。
PPAからインストールすることができます。

おわりに

7.07からの詳細な変更点は7.08リリース - 2017-10-29を確認してください。

それでは、Mroongaでガンガン検索してください!

2017-10-12

Mroonga 7.07リリース!

Mroonga 7.07 をリリースしました!

変更点

今月の変更点は以下の通りです。

  • mroonga_query_expand UDFのサポート
  • MariaDB公式が提供している10.1/10.2パッケージに対応しました

mroonga_query_expand UDFのサポート

今回のリリースでは、mroonga_query_expand というUDFをサポートしました。 これはクエリーに含まれる語の同義語を展開して検索するのに使います。

使い方の例を示します。

CREATE TABLE diaries (
  id INT PRIMARY KEY AUTO_INCREMENT,
  content VARCHAR(255),
  FULLTEXT INDEX (content)
) ENGINE = Mroonga DEFAULT CHARSET utf8;

CREATE TABLE synonyms (
  term varchar(255),
  synonym varchar(255),
  INDEX (term)
) ENGINE= Mroonga DEFAULT CHARSET utf8;

全文検索用の diaries テーブルと同義語を定義する synonyms テーブルを例では使います。

これに、同義語のデータと検索対象のデータを登録します。

INSERT INTO synonyms VALUES ('Groonga', 'Groonga Mroonga Rroonga');

INSERT INTO diaries (content) VALUES ("Groonga is fast.");
INSERT INTO diaries (content) VALUES ("Mroonga is fast.");
INSERT INTO diaries (content) VALUES ("PGroonga is fast.");

これでサンプルを試す準備ができました。 mroonga_query_expand の構文は次のとおりです。

mroonga_query_expand("同義語を定義するテーブル", "対象語句のカラム", "同義語を定義したカラム", "検索語句");

Groonga で検索したら Mroonga でも検索したい場合には次のように mroonga_query_expand を使って検索します。

mysql> SELECT * FROM diaries WHERE MATCH(content) AGAINST(mroonga_query_expand("synonyms", "term", "synonym", "Groonga") IN BOOLEAN MODE);
+----+------------------+
| id | content          |
+----+------------------+
|  1 | Groonga is fast. |
|  2 | Mroonga is fast. |
+----+------------------+
2 rows in set (0.01 sec)

mroonga_query_expandsynonyms テーブルから Groonga に対応する「(Groonga Mroonga Rroonga)」を返すので、期待通りにGroongaMroongaを含む結果を取得できました。

MariaDB公式が提供している10.1/10.2パッケージに対応しました

今回のリリースから、MariaDB公式が提供している10.1および10.2向けのパッケージの提供を始めました。 対象となるのは、CentOS 6とCentOS 7です。

対応している環境それぞれのインストール手順についてはドキュメントを参照してください。

おわりに

7.06からの詳細な変更点は7.07リリース - 2017-10-12を確認してください。

それでは、Mroongaでガンガン検索してください!

2017-08-29

Mroonga 7.06リリース!

今日は肉の日ですね!

Mroonga 7.06 をリリースしました!

変更点

今月の変更点は以下の通りです。

  • 生成カラム(Generated Column)のサポート

生成カラム(Generated Column)のサポート

今回のリリースでは、生成カラム(Generated Column)をMroongaでもサポートしました。 これは他のカラムの値を自動計算した結果を取り出すことのできるカラムを定義できる機能です。

たとえば、次のような定義でJSONの一部を取り出した結果を使って検索することができるようになります。

CREATE TABLE logs (
  id INT,
  record JSON,
  message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) STORED,
  FULLTEXT INDEX(message) comment 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;

上記の例だと、record の値の一部を message カラムの内容として定義しています。 すると、次のようなクエリでJSONの一部だけを全文検索することができます。

> SELECT * FROM logs WHERE MATCH(message) AGAINST("ar" IN BOOLEAN MODE);
+------+-----------------------------------------+-----------+
| id   | record                                  | message   |
+------+-----------------------------------------+-----------+
|    1 | {"level": "info", "message": "start"}   | "start"   |
|    2 | {"level": "info", "message": "restart"} | "restart" |
+------+-----------------------------------------+-----------+
2 rows in set (0.02 sec)

実データを持たない VIRTUAL も定義できます。

CREATE TABLE logs (
  id INT,
  record JSON,
  message VARCHAR(255) GENERATED ALWAYS AS (json_extract(`record`, '$.message')) VIRTUAL
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;

ただし、この場合、FULLTEXT INDEX(message) を張ることはできません。

おわりに

7.05からの詳細な変更点は7.06リリース - 2017-08-29を確認してください。

それでは、Mroongaでガンガン検索してください!

2017-07-29

Mroonga 7.05リリース!

今日は肉の日ですね!

Mroonga 7.05 をリリースしました!

変更点

今月の変更点は以下の通りです。

  • mroonga_query_log_file のサポート
  • MariaDB 10.2.7をサポート
  • mroonga_commandの自動エスケープ対応
  • Ubuntu 16.10(Yakkety Yak)サポート終了

mroonga_query_log_file のサポート

今回のリリースでは、mroonga_query_log_file変数をサポートしました。

この変数にパスを設定しておくと、Groongaのクエリーログを出力することができるようになります。

mysql> SET GLOBAL mroonga_query_log_file = "/tmp/query.log";

Mroongaが内部で利用しているストレージエンジンとしてのGroongaのボトルネックを解析したい、といった用途に使うことができます。

MariaDB 10.2.7をサポート

今回のリリースでは、メーリングリストで報告のあったMariaDB 10.2.7のビルドエラーを修正しました。

mroonga_commandの自動エスケープ対応

今回のリリースでは、mroonga_commandの自動エスケープに対応しました。

これはどういうことかというと、コマンドとその引数を分けて指定できて、なおかつ自動的にエスケープされるようになるのでmroonga_commandが今までより使いやすくなりますよ、ということです。

今までは、mroonga_commandに渡した文字列がどうエスケープされて最終的にGroongaに渡されるかということを気にしないといけなかったので、そのあたりがだいぶらくになります。

新しい構文と使用例は以下の通りです。

SELECT mroonga_command('COMMAND_NAME',
                      'PARAMETER_NAME_1', 'PARAMETER_VALUE_1',
                       ...,
                      'PARAMETER_NAME_N', 'PARAMETER_VALUE_N');

使用例:

SELECT mroonga_command('select',
                       'table', 'diaries',
                       'filter', 'title @ "Groonga"');

Ubuntu 16.10(Yakkety Yak)サポート終了

今回のリリースから、Ubuntu 16.10(Yakkety Yak)向けパッケージの提供を終了しました。7/20にUbuntu 16.10がEOLとなったためです。

LTS等への移行をオススメします。

おわりに

7.04からの詳細な変更点は7.05リリース - 2017-07-29を確認してください。

それでは、Mroongaでガンガン検索してください!

2017-06-29

Mroonga 7.04リリース!

今日は肉の日ですね!

Mroonga 7.04 をリリースしました!

変更点

今月の変更点は以下の通りです。

  • Debian 9 (stretch)をサポート

Debian 9 (stretch)をサポート

今回のリリースでは、今月リリースされたDebian 9 (stretch)をサポートしました。

Debian 9でのMroongaのインストール方法はインストールを参照してください。

おわりに

7.03からの詳細な変更点は7.04リリース - 2017-06-09を確認してください。

それでは、Mroongaでガンガン検索してください!