BloGroonga

2015-03-29

Groonga 5.0.1リリース

今日は肉の日ですね!Groonga 5.0.1 をリリースしました!

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

変更内容

今回の主な変更点は次の通りです。

  • 非互換な変更
    • スコアに関連したDB APIの非互換な変更があります
  • 改良
    • 正規表現による検索のサポート
    • Windowsでデータベースの初期サイズをデフォルトでよりコンパクトに
  • 実験的な変更
    • 頻出トークンとレアトークンを同時に検索するときの高速化

それでは、いくつか簡単に紹介します。

非互換な変更 - スコアに関連したDB APIの非互換な変更があります

今回のリリースではDB API層に非互換な変更がはいりました。以下の2点を修正する必要があります。

  • 内部で使っている_scoreの型の変更に追従する
  • grn_search_optarg0で初期化する

新旧のGroongaで正しく動作するようにするには次のように_scoreの型変更に対応したコードに修正してください。

grn_obj *score;
double score_value;

if (score->header.domain == GRN_DB_FLOAT) {
  score_value = GRN_FLOAT_VALUE(score);
} else {
  score_value = (double)GRN_INT32_VALUE_FLOAT_VALUE(score);
}

また、grn_search_optargを次のように0で初期化してください。

grn_search_optarg options;
memset(&options, 0, sizeof(grn_search_optarg));

すでに上記のようにしているなら、リビルドしなおす(ABIの変更に追従)だけです。

改良 - 正規表現による検索のサポート

今回のリリースでは、正規表現を使った検索をサポートしました。

select コマンドの query オプションと filter オプションで正規表現を使えます。注意しないといけないのは、queryfilterとでは構文がちょっと違うことです。

queryの場合:

${COLUMN}:~${REGULAR_EXPRESSION}

filterの場合:

${COLUMN} @~ ${REGULAR_EXPRESSION}

「:~」と「@~」の違いは、Groongaの設計の違いによるものです。

queryはクエリー構文を記述するのに対して、filterにはスクリプト構文を記述する必要があります。

この構文の違いは filter のほうが複雑な条件を記述できるように設計されたためです。

インデックスを使って高速に検索することもできます。そのためには、次の条件を満すインデックスを作成します。

  • 語彙表は TABLE_PAT_KEY テーブルであること。
  • 語彙表は TokenRegexp トークナイザーを使っていること。
  • インデックスカラムは WITH_POSITION フラグ付きであること。

つまり、次のようなカラムインデックスを作成します。

table_create RegexpLexicon TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenRegexp \
  --normalizer NormalizerAuto
column_create RegexpLexicon logs_message_index \
  COLUMN_INDEX|WITH_POSITION Logs message

こうすることで、上記の例だとmessageカラムをインデックスを使って正規表現による検索をすることができるようになります。

詳細については正規表現のドキュメントを参照してください。

改良 - Windowsでデータベースの初期サイズをデフォルトでよりコンパクトに

今回のリリースでは、データベースの初期サイズを小さくし、ディスク使用量を削減する仕組みをデフォルトで有効にしました。これはGroonga 4.1.1ではいった実験的な機能を正式に採用したものです。

これまで、WindowsではGNU/Linuxとは異なりかなりサイズが大きい初期ファイル(128MiB)をデフォルトで使っていました。

このデータベースファイルはカラムを作れば作るだけ増えていくので、登録しているデータが少ない場合にはかなり無駄な領域があることになります。

これはあまり嬉しくないので、WindowsでもGNU/Linux環境と同じように必要に応じて追加していくようにデフォルトの挙動を変更したのが今回の変更です。

以下のメールに詳しいことが書いてあります。

ongaeshiさんがテストに協力してくれました。ありがとうございます!

この変更により、後方互換性(新しいGroongaで古いGroongaのデータベースを開ける)は保たれますが、前方互換性(古いGroongaで新しいGroongaのデータベースを開ける)は失われていることに注意してください。

実験的な改良 - 頻出トークンとレアトークンを同時に検索するときの高速化

今回のリリースでは、 頻出トークンとレアトークンを同時に検索したときの検索を高速に行えるようになりました。「同時に」というのがポイントです。この機能はデフォルトでは無効です。

この機能を有効にするには、次の環境変数を指定する必要があります。

GRN_II_CURSOR_SET_MIN_ENABLE=1

注意事項として、ある程度のサイズの文書量がないと改善の効果を体感できないというのがあります。

この機能の詳細についてはメーリングリストの次の投稿を参照してください。

期待通りに改善している報告があつまったらデフォルトで有効にします。

さいごに

5.0.0からの詳細な変更点は 5.0.1リリース 2015-03-29 を確認してください。

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