こんばんは、堀本です。 今日は肉の日ですね! Groonga 9.0.4をリリースしました! http://groonga.org/ja/blog/2019/06/29/groonga-9.0.4.html 変更点一覧: http://groonga.org/ja/docs/news.html#release-9-0-4 主な変更点は以下の通りです。 * 配列リテラルの複数要素をサポートしました。 * ベクターの等価演算をサポートしました。 * [logical_range_filter] 出力するクエリーログを追加しました。 * [grndb] 新しいオプション ``--since`` を追加しました。 * [query] ``default_operator`` を追加しました。 * [optimizer] 複数のfilter条件と ``xxx.yyy=="keyword"`` のような条件を 指定した際にエラーが発生するバグを修正しました。 * GroongaのWindows用のパッケージ(VC++版)に不足していたライセンスファイルを追加しました。 * GroongaのWindows用のパッケージ(VC++版)UCRTランタイムを追加しました。 * [window_function] メモリリークを修正しました。 * これは、複数のウインドウに対してソートキーを適用した際に発生します。 ### 配列リテラルの複数要素をサポートしました。 以下のように ``filter`` 条件の中で複数要素を持った配列リテラルを使うことができます。 ``` table_create Values TABLE_NO_KEY column_create Values numbers COLUMN_VECTOR Int32 load --table Values [ {"numbers": [2, 1, 3]}, {"numbers": [2, 3, 4]}, {"numbers": [8, 9, -1]} ] select Values \ --filter 'numbers == [2, 3, 4]' \ --output_columns 'numbers' [[0,0.0,0.0],[[[1],[["numbers","Int32"]],[[2,3,4]]]]] ``` ### ベクターの等価演算をサポートしました。 以下のようにベクターに対して等価演算を使うことができます。 ``` table_create Values TABLE_NO_KEY column_create Values numbers COLUMN_VECTOR Int32 load --table Values [ {"numbers": [2, 1, 3]}, {"numbers": [2, 3, 4]}, {"numbers": [8, 9, -1]} ] select Values \ --filter 'numbers == [2, 3, 4]' \ --output_columns 'numbers' [[0,0.0,0.0],[[[1],[["numbers","Int32"]],[[2,3,4]]]]] ``` ### [logical_range_filter] 出力するクエリーログを追加しました。 ``logical_range_filter`` コマンドが、以下のタイミングでログを出力するようになります。 * ``logical_range_filter`` によるフィルター後 * ``logical_range_filter`` によるソート後 * 動的カラム適用後 * 結果出力後 この機能によって、このコマンドがどこまで完了したかを見ることができます。 ### [grndb] Added support new option ``--since`` 検査の範囲を指定できます。 更新時刻は ISO 8601形式か -3days や -2.5weeksといった -NUNIT 形式で指定します。 以下は --since オプションをISO 8601形式で指定する例です。 ``` % grmdb check --since=2019-06-24T18:16:22 /var/lib/groonga/db/db ``` 上記の例では 2019-06-24T18:16:22 以降に更新されたオブジェクトをチェックします。 以下は --since オプションを -NUNIT 形式で指定する例です。 ``` % grmdb check --since=-7d /var/lib/groonga/db/db ``` 上記の例では、直近7日で更新されたものがチェックされます。 [grndb#since] も参考にしてください。 ### [query] ``default_operator``を追加しました。 "keyword1 keyword2"時の演算子をカスタマイズできます。 デフォルトでは、"keyword1 keyword2"はAND演算です。 以下のように、"keyword1 keyword2"の演算子をAND以外に変更できます。 ``` table_create Products TABLE_NO_KEY column_create Products name COLUMN_SCALAR ShortText load --table Products [ ["name"], ["Groonga"], ["Mroonga"], ["Rroonga"], ["PGroonga"], ["Ruby"], ["PostgreSQL"] ] select \ --table Products \ --filter 'query("name", "Groonga Mroonga", {"default_operator": "OR"})' [ [ 0, 0.0, 0.0 ], [ [ [ 3 ], [ [ "_id", "UInt32" ], [ "name", "ShortText" ] ], [ 1, "Groonga" ], [ 4, "PGroonga" ], [ 2, "Mroonga" ] ] ] ] ```