Mroongaブログ

2012-09-29

mroonga 2.07リリース

mroonga 2.07 をリリースしました!

今回のリリースの主なトピックは以下の通りです。

  • スニペット関数のサポート (実験的)
  • MeCab向けにAppArmorの設定を追加

インストール/アップグレード方法

それぞれの環境毎のインストール方法: インストール

今回のリリースと前回のリリースでは、データベースの互換性があります。そのため、データベースの再構築は不要です。

ただし、以前のバージョンからアップグレードする場合には、アップグレード手順に注意が必要です。現在お使いのバージョンごとのアップグレード手順を参照してください。

1.20より前のバージョンからアップグレードする場合は 1.20リリース 2012/01/29 にある手順を使ってください。

1.20からアップグレードする場合は 2.00リリース 2012/02/29 にある手順を使ってください。

2.00か2.01からアップグレードする場合は、 2.02リリース 2012/04/29 にある手順でパッケージ署名用の新しい鍵をインポートしてください。

2.00以降でストレージモードにてマルチカラムインデックスを使っている場合は 2.02リリース 2012/04/29 にある手順でインデックスを作り直してください。

2.04以降でストレージモードにてSETカラムもしくは要素数が256より少ないENUMを使用している場合は、 2.05リリース 2012/07/29 にある手順でデータベースを再作成してください。

スニペット関数のサポート (実験的)

mroongaの前身である Tritonnプロジェクト ではsnippet UDFなる文書中のキーワード周辺のテキストを抽出する機能を提供していました。

今回のリリースではsnippet UDFと同様の機能を提供する mroonga_snippet 関数を実験的にサポートしました。あくまで実験的なので今後予告なく変更する可能性があることに注意してください。

mroonga_snippet 関数は以下のような構文で使用します。

  SELECT mroonga_snippet(文書, snippetの長さの最大バイト数, snippetの最大個数, 文書の文字コード,
    先頭の空白の無視, エスケープの有無, snippetの開始テキスト, snippetの終了テキスト, 
    単語1, 単語1の前につけるテキスト, 単語1の後につけるテキスト,
    単語2, 単語2の前につけるテキスト, 単語2の後につけるテキスト, ...);

どんな風に使えるのかを実際の例で説明します。

題材は「fulltextというキーワード含む文書を検索し、その文書にキーワードとして'MySQL'や'search'もあれば、該当部分にタグをつけて抽出する」です。

上記を実現するには mroonga_snippet 関数と MATCH ... AGAINST 構文を使います。

以下にスキーマ定義と、サンプルデータ、実行結果を示します。

実行例で使用するスキーマ定義はこちら:

  CREATE TABLE `snippet_test` (
    `id` int(11) NOT NULL,
    `text` text,
    PRIMARY KEY (`id`),
    FULLTEXT KEY `text` (`text`)
  ) ENGINE=mroonga DEFAULT CHARSET=utf8

実行例で使用するサンプルデータはこちら:

  insert into snippet_test (id, text) values (1, 'An open-source fulltext search engine and column store.');
  insert into snippet_test (id, text) values (2, 'An open-source storage engine for fast fulltext search with MySQL.');
  insert into snippet_test (id, text) values (3, 'Tritonn is a patched version of MySQL that supports better fulltext search function with Senna.');

実行結果はこちら:

  mysql> select * from snippet_test;
  +----+-------------------------------------------------------------------------------------------------+
  | id | text                                                                                            |
  +----+-------------------------------------------------------------------------------------------------+
  |  1 | An open-source fulltext search engine and column store.                                         |
  |  2 | An open-source storage engine for fast fulltext search with MySQL.                              |
  |  3 | Tritonn is a patched version of MySQL that supports better fulltext search function with Senna. |
  +----+-------------------------------------------------------------------------------------------------+
  3 rows in set (0.00 sec)

  mysql> select id, mroonga_snippet(text, 8, 2, 'ascii_general_ci', 1, 1, '...', '...', 
           'fulltext', '', '', 
           'MySQL', '', '', 
           'search', '', '') 
           from snippet_test where match(text) against ('fulltext');

  +----+-------------------------------------------------------------------------------------+
  | id | (...クエリを省略...)                                                                 |
  +----+-------------------------------------------------------------------------------------+
  |  1 | ...fulltext...... search ...|
  |  2 | ...fulltext...... search ...|
  |  3 | ...f MySQL ......fulltext...|
  +----+-------------------------------------------------------------------------------------+
  3 rows in set (0.00 sec)

上記実行例からわかるように、 MATCH ... AGAINST 構文と一緒に使うことで、 'fulltext' というキーワードを含む文書で、 'MySQL''search' というキーワードも含んでいる部分を抽出することができます。

mroonga_snippet 関数の詳細については、 スニペットの取得方法 (文脈付き索引) を参照してください。

MeCab向けにAppArmorの設定を追加

これまでMeCabの辞書についてはAppArmorの設定がないため、実際には、Ubuntuで導入されたAppArmorが有効な環境ではMySQLへアクセス制限がかかり、MeCabの辞書が読み込めないことがありました。

従来は個別にAppArmorの設定を環境に応じて行う必要がありましたが、それでは不便なのでMeCab向けのAppArmorの設定ファイルを追加しました。

さいごに

2.06からの詳細な変更点は 2.07リリース 2012/09/29 を確認してください。

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