Mroongaブログ

2014-10-29

Mroonga 4.07リリース!

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

変更点

今回は2つの有用な機能が追加されています。まだ実験的な扱いですが、興味のある方はぜひ試してみてフィードバックをおねがいします。

  • カラム値の圧縮をサポート
  • トークンフィルター機能を追加

カラム値の圧縮をサポート

今回のリリースでは、カラム値の圧縮をサポートしました。圧縮にはzlibまたはLZ4を使えます。

カラムを圧縮するには、カラムをつくるときにコメントで flags "COLUMN_SCALAR|COMPRESS_ZLIB" または flags "COLUMN_SCALAR|COMPRESS_ZLIB" を指定してください。

content TEXT COMMENT 'flags "COLUMN_SCALAR|COMPRESS_ZLIB"'
content TEXT COMMENT 'flags "COLUMN_SCALAR|COMPRESS_LZ4"'

参考: コメントでのflagsに関するドキュメント

なお、zlibとLZ4の傾向の違いは次の通りです。

  • zlibの方が圧縮率はよい
  • LZ4の方が圧縮・展開速度が速い

まずはLZ4を試してみて、それでもデータ量が多いならzlibを検討するのがよいでしょう。ただ、データ量が多いときはテーブル分割を考慮に入れた方がよいケースもあります。ベンチマークをとりながら検討してください。

実際に計測してはいませんが、数バイトや数10バイトなど小さいデータの場合は圧縮する方がサイズが大きくなる可能性があります。(メタ情報を追加したりするため。)そのため、ある程度大きめのデータに対してだけ使うことをオススメします。例えば、タグの値を入れたカラムなどは圧縮する意味はあまりありません。

なお、圧縮したカラムでもソートやドリルダウンをできますが、非圧縮のカラムより遅くなります。ただ、大きめのデータの場合(Wikipediaの本文データなど)はソートやドリルダウン対象にすることはないので問題になることはないでしょう。

注意:カラム値の圧縮はまだ実験的な機能です。慎重な人はまだ使わないことをオススメしますが、興味のある方はぜひ試してみて、フィードバックをおねがいします。フィードバックとは次のようなものです。

  • きちんと動いた
    • 多くの人からきちんと動いたという報告があれば「実験的な機能」扱いではなく「正式機能」扱いにします。
  • うまく動かなかった
    • 修正するので詳細を教えてください。
  • このくらい効果があった
    • サイズ面、速度面で報告があると他のユーザーの参考になるので、ベンチマークなどをとってその結果を教えてください。

なお、カラム圧縮機能を使うためには使っているGroongaがzlibまたはLZ4をサポートしている必要があります。それらはシステム変数で確認できます。

それぞれ、次のようなクエリで確認できます。

SHOW GLOBAL VARIABLES LIKE 'mroonga_libgroonga_support_zlib';
SHOW GLOBAL VARIABLES LIKE 'mroonga_libgroonga_support_lz4';

トークンフィルター機能を追加

今回のリリースではトークンフィルター機能を追加しました。これは、トークナイズ後の各トークンに対して処理を実行できる機能です。例えば、トークンを無視したり変更したりできます。

今回のリリースでは、トークンフィルターを2つ追加しました。

追加したトークンフィルターをそれぞれ紹介します。

TokenFilterStopWord

TokenFilterStopWord を使うと文書を検索する時にトークナイズされたトークンからストップワードを除去します。

TokenFilterStopWord はプラグインとして提供されているので、1度だけプラグインを登録します。

SELECT mroonga_command('register token_filters/stop_word');

ストップワード機能を使うには、語彙表を用意してストップワードを主キーとして登録します。また、BOOL 型で is_stop_word カラムを作成し、データを登録するときには true を指定してください。

CREATE TABLE terms (
  term VARCHAR(64) NOT NULL PRIMARY KEY,
  is_stop_word BOOL NOT NULL
) Engine=Mroonga COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8mb4;

CREATE TABLE memos (
  content TEXT
  FULLTEXT INDEX (content) COMMENT 'table "terms"'
) Engine=Mroonga DEFAULT CHARSET=utf8mb4;

INSERT INTO terms VALUES ("and", true);

上記のように語彙表( terms テーブル)に is_stop_word カラムを用意して、ストップワードの対象となる語句を PRIMARY KEY として登録するだけです。ストップワードの is_stop_word の値は true にしておきましょう。

この場合 and がストップワードとして登録されているので、次のように Hello and で検索しても and をストップワードとして扱い、無視します。つまり、 Hello で検索したのと同じ結果になります。

SELECT *
  FROM memos
  WHERE MATCH (content) AGAINST ("+Hello +and" IN BOOLEAN MODE);
TokenFilterStem

TokenFilterStem を使うといわゆるステミングを有効にすることができます。

できるのですが、まだ使い勝手が悪いことがわかっているので、ここでの紹介は省略します。

詳細はMroongaでGroongaの機能を使いこなす高度なテーブル設計をする方法を参照してください。

Ubuntuユーザー向け情報

今回のリリースでは先日リリースされたばかりのUbuntu 14.10に対応しています。Ubuntuユーザーの人も安心してアップグレードしてください。

MariaDBバンドル近況

なんと、ついにMroongaがMariaDBにマージされました。

マージされたばかりなので、MroongaがバンドルされたMariaDBはまだリリースされていません。MariaDB 10.0.15にはバンドルされているはずなので、期待して待っていてください!

イベントのお知らせ

11月29日(土)は、今年も「全文検索エンジンGroongaを囲む夕べ」を開催します!次のような内容です。興味のある人はぜひイベントページに登録して、開催を楽しみにしていてください。

  • 開発者が今年一年の改善点を紹介
  • 開発者が今後の開発の方向性を紹介
  • Mroongaを便利に使うためのツールやライブラリーの作者がプロダクト紹介
  • ユーザーがMroongaに関することを紹介
  • 検索エンジン自作入門のサイン会(すでに購入している人は持ってきてください。)

イベント概要は次の通りです。

OSC 2014 Tokyo/Fallでの発表資料

先日開催されたOSC 2014 Tokyo/Fallで日本MySQLユーザ会がMySQLでの日本語全文検索事情について紹介しました。Mroongaについても触れられています。全文検索についてあまり知らない人向けの資料ですが、興味のある方は確認してください。

さいごに

4.06からの詳細な変更点は 4.07リリース - 2014/10/29 を確認してください。

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