お知らせ

8.0.1リリース - 2018-03-29

改良

  • [ログ] クエリーログ内で filter 条件を表示するようにしました。この機能はデフォルトでは、無効になっています。有効にするためには、環境変数 GRN_QUERY_LOG_SHOW_CONDITION=yes を設定します。

  • *.pdb*.dll*.exe と同じディレクトリにインストールされるようにしました。

  • [logical_count] filtered ステージの動的カラムをサポートしました。

  • [logical_count] [post_filter] フィルタータイミングを新規追加しました。 filtered ステージのカラムが生成された後に実行されます。

  • [logical_select] [post_filter] フィルタータイミングを新規追加しました。 filtered ステージのカラムが生成された後に実行されます。

  • ベクターデータに対してLZ4/Zstd/zlibの圧縮をサポートしました。

  • _key のようなアクセサへのエイリアスをサポートしました。

  • [logical_range_filter] 大きい結果セットに対するウィンドウ関数の動作を最適化しました。一致するレコードが十分見つかった場合は、残りのウィンドウに対してウィンドウ関数を適用しません。

    TODO: この最適化は、最適化によるオーバーヘッドが無視出来ない場合、小さな結果セットに対しては、無効になります。 オーバーヘッドがどのくらいになるのかは、まだ評価出来ていません。

  • [select] match_escalation パラメーターを追加しました。--match_escalation yes とすることによって、マッチ演算のエスカレーションを強制的に有効にします。このパラメータは、 --match_escalation_threshold 99999....999 よりも強力です。match_escalation yes は、 SOME_CONDITIONS && column @ 'query' もエスカレーションしますが、 --match_escalation_threshold ではしないためです。

    デフォルトは、 --match_escalation auto です。これは、既存の動作と同じです。

    --match_escalation no とすることで、マッチ演算のエスカレーションを無効にできます。これは、 --match_escalation_threshold -1 と同様の動きになります。

  • [httpd] バンドルしているnginxのバージョンを1.13.10に更新しました。

修正

  • 共通接頭辞がどのトークンにもマッチしない時にメモリリークする問題を修正しました。[GitHub#820] [村上さんがパッチ提供]
  • 同一プロセスで複数のデータベースを開いている時に、異なるデータベースのキャッシュを使用してしまう問題を修正しました。
  • 誤ったインデックスが構築される問題を修正しました。この問題は、インデックスカラムのソースがベクターカラムでかつ、 WITH_SECTION を指定していない時だけ発生します。
  • 比較時(>,>=,<,<=,==,!=)に定数がオーバーフローまたは、アンダーフローし得る問題を修正しました。

感謝

  • 村上さん

8.0.0リリース - 2018-02-09

メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなくアップグレードできます。

改良

  • [select] --drilldown_adjusterdrilldowns[LABEL].adjuster を追加しました。drilldown結果に対して、スコア調整できるようになります。

  • [動的なインデックス構築方法] 環境変数の名前を GRN_II_REDUCE_EXPIRE_ENABLE から GRN_II_REDUCE_EXPIRE_THRESHOLD へ変更しました。

    GRN_II_REDUCE_EXPIRE_THRESHOLD=0 == GRN_II_REDUCE_EXPIRE_ENABLE=noGRN_II_REDUCE_EXPIRE_THRESHOLD=-1 とすると、しきい値は ii->chunk->max_map_seg / 2 となります。GRN_II_REDUCE_EXPIRE_THRESHOLD > 0 とすると、しきい値は MIN(ii->chunk->max_map_seg / 2, GRN_II_REDUCE_EXPIRE_THRESHOLD) となります。デフォルト値は、 GRN_II_REDUCE_EXPIRE_THRESHOLD=32 です。

  • [between] 境界値なしの between() を受け付けるようにしました。between() の引数の数が3つでも実行できます。2番目と3番目の引数が境界を含むものとして処理されます。

修正

  • ハッシュテーブルのメモリリークを修正しました。 [GitHub:mroonga/mroonga#190][fuku1さんの報告]
  • 配列のメモリリークを修正しました。
  • [select] output_columns で結果の変化する関数を使っている時にキャッシュしないようにしました。
  • [Windows] WSASend が適切なエラーコードを返すようにしました。

感謝

  • fuku1さん

7.1.1リリース - 2018-01-29

改良

  • [Ubuntu] Ubuntu 17.04(Zesty Zapus)のサポートをやめました。2018年1月13日でサポートが切れた(EOLになった)ためです。

  • Quorum matchをサポートしました。スクリプト構文でもクエリー構文でもquorum matchを使うことができます。

    TODO: quorum matchの構文をドキュメントへ追加、それらのドキュメントへのリンク生成

  • スクリプト構文で類似度のカスタマイズをサポートしました。スクリプト構文内で類似度のカスタマイズができます。

    TODO: 類似度のカスタマイズの構文をドキュメントへ追加、それらのドキュメントへのリンク生成

  • [grndb][--force-lock-clear] --force-lock-clear を追加しました。このオプションは、データベースやテーブル、データカラムのロックを強制的に解除します。データベースやテーブル、データカラムにロックが残っていても再度データベースを使えるようになります。

    しかし、このオプションはとても危険です。通常は使うべきではありません。データベースが壊れている場合は、データベースは依然として破損しています。このオプションはロックを無視するだけです。

  • [load] サロゲートペアをエスケープ可能にしました。例えば、 \uD83C\uDF7A🍺 として処理されます。

  • [Windows] Windows上でスパースファイルを使用するように変更しました。ディスク容量を節約できます。パフォーマンス上のデメリットはありません。

  • [動的なインデックス構築方法] インデックスカラム内のメモリーマップをいつ開放するかをコントロールする環境変数 GRN_II_REDUCE_EXPIRE_THRESHOLD を追加しました。デフォルトは -1 です。 -1 のときはインデックスカラムのサイズによって動的に開放するタイミングを決めます。インデックスカラムが小さければ頻繁に解放し、大きければ頻度を下げます。

    0 を設定すると従来と同じ挙動になります。従来の挙動とは、Groongaは開放できそうなときはいつも開放しようとするという挙動です。

  • [logical_range_filter] [post_filter]フィルタータイミングを新規追加しました。 filtered ステージで生成されるカラムが生成された後に実行されます。

修正

  • 参照ベクタのインデックスを作成する際に使用するリソースを削減しました。[GitHub#806][村上さんが報告]
  • [table_create] token_filters が無効であってもテーブルが作成される不具合を修正しました。

感謝

  • 付超群さん
  • 村上さん

7.1.0リリース - 2017-12-29

改良

  • [load] load コマンドのクエリーログのフォーマットを改良しました。load コマンドのクエリーログに以下の項目が追加されます。

    • ロードしたレコード数を表示します。
    • ロードがエラーになったレコードとカラムの数を表示します。
    • ロード後の総レコード数を表示します。
  • [logical_count] logical_count コマンドのクエリーログのフォーマットを改良しました。logical_count コマンドのクエリーログに以下の項目が追加されます。

    • マッチしたレコード数を表示します。
  • [logical_select] logical_select コマンドのクエリーログのフォーマットを改良しました。 logical_select コマンドのクエリーログに以下の項目が追加されます。

    • マッチしたレコード数を表示します。
    • ドリルダウンした数を表示します。
    • ラベルつきのドリルダウンをした数を表示します。
    • それぞれのシャードで検索にマッチした数を表示します。
    • 検索対象のシャードの情報を"[...]"を使って表示します。
  • [delete] delete コマンドのクエリーログのフォーマットを改良しました。 delete コマンドのクエリーログに以下の項目が追加されます。

    • 削除したレコード数と削除に失敗したレコード数を表示します。
    • 削除後に残ったレコード数を表示します。
  • [Groonga HTTPサーバー] groonga -s で実行したサーバーをC-c で確実に停止出来るようにしました。

  • Lisp表現( #<nan>#i1/0#-i1/0 )の代わりに NanInfinity-Infinity を使用するように改良しました。

  • ドリルダウンでベクター型のカラムをサポートしました。

  • 部分的に正規表現を用いた検索から、キーワードを抽出出来るように改良しました。これにより、正規表現を用いた検索に highlight_htmlsnippet_html を使えるようになります。[takagi01さんに報告いただきました]

  • grn_bulk_*() APIにおいて、 realloc() が呼ばれる回数を削減しました。

    Windowsにおいて出力が大きいケースでパフォーマンスが向上します。例えば、出力が100MBを超える場合には、約100倍速くなります。

    realloc() はWindowsでは重い処理であるためです。

  • GRN_II_OVERLAP_TOKEN_SKIP_ENABLE の値にyesが設定された時のみ GRN_II_OVERLAP_TOKEN_SKIP_ENABLE を有効にするようにしました。

  • GRN_NGRAM_TOKENIZER_REMOVE_BLANK_DISABLE は非推奨になりました。代わりに GRN_NGRAM_TOKENIZER_REMOVE_BLANK_ENABL=no を使って下さい。

  • 関数 index_column_source_records を新規に追加しました。インデックスカラムのソースを取得することができます。[村上さんがパッチを提供]

  • [select] offsetに負の値を設定出来るようにしました。

  • 固定サイズのカラムの値を取得する際のパフォーマンスを向上しました。

  • [groonga 実行ファイル] groongaコマンドの引数に --listen-backlog オプションを追加しました。listenシステムコールのbacklogをカスタマイズできます。

  • [httpd] バンドルしているnginxのバージョンを1.13.8に更新しました。

修正

  • highlight_full 関数を使用するとメモリリークする問題を修正しました。

  • Mroongaで以下ような呼び出しを行った際にクラッシュする問題を修正しました。

    1. grn_expr_append_const("_id")
    2. grn_expr_append_op(GRN_OP_GET_VALUE)

感謝

  • takagi01
  • 村上さん

7.0.9リリース - 2017-11-29

改良

  • Apache Arrowの新しいバージョンをサポートしました。このリリースでは、Apache Arrowサポートを有効にするには0.8.0以降が必要です。
  • [sharding] 動的カラムの新しいAPIを追加しました。
    • Groonga::LabeledArguments
  • [sharding] 便利メソッドである Table#select_all を追加しました。
  • [logical_range_filter] 動的カラムをサポートしました。 initialfiltered ステージのみをサポートしています。
  • [logical_range_filter] cache 引数と動的カラムに関するドキュメントを追加しました。
  • [logical_count] 動的カラムをサポートしました。initial ステージのみサポートしています。
  • [logical_count] 名前付き引数のドキュメントを追加しました。
  • [select] --match_columns _key をインデックスを使わない場合でもサポートしました。
  • [in_values] 126を超える引数を指定できるようにしました。 [GitHub#760] [GitHub#781] [groonga-dev,04449] [むらたさんが報告]
  • [httpd] バンドルしているnginxのバージョンを1.13.7に更新しました。

修正

  • [httpd] 古いバージョンのGroongaがすでにインストールされている場合にそちらを参照してしまい、ビルドエラーになる問題を修正しました。 [GitHub#775] [myamanishi3さんが報告]
  • [in_values] in_values に多すぎる引数を指定するとクラッシュする不具合を修正しました。この不具合は126を超える引数をサポートする過程で見つかりました。 [GitHub#780]
  • [cmake] LZ4 と MessagePack をビルド時に正しく検出できるようにしました。 [Sergei Golubchikさんが報告]
  • [静的なインデックス構築方法] ベクターカラムの静的索引構築時に必要以上のリソースを使用する問題を修正しました。1つのベクターカラムの要素数が多く、大量のレコードがある場合はGroongaがクラッシュしていました。 [groonga-dev,04533][内山敏郎さんが報告]

感謝

  • むらたさん
  • myamanishi3さん
  • Sergei Golubchikさん
  • 内山敏郎さん

7.0.8リリース - 2017-10-29

改良

  • [windows] クラッシュした際にバックトレースを出せるようにしました。関数呼び出しだけでなく、ソースコードの該当行も可能な限り表示します。バックトレースのサポートにより、問題の素早い解決につながります。
  • QUERY_NO_SYNTAX_ERROR を指定してあれば "( )" を --query に指定して実行できるようにしました。 以前のバージョンでは、エラーになっていました。 [GitHub#767]
  • QUERY_NO_SYNTAX_ERROR を指定してあれば "(+)" を --query に指定して実行できるようにしました。 以前のバージョンでは、エラーになっていました。 [GitHub#767]
  • QUERY_NO_SYNTAX_ERROR を指定してあれば --query "~y" (~ではじまる)クエリーを実行できるようにしました。 以前のバージョンでは、エラーになっていました。 [GitHub#767]
  • expired のログレベルを info から debug に変更しました。 2017-10-29 14:05:34.123456|i| <0000000012345678:0> expired i=000000000B123456 max=10 (2/2) このメッセージはインデックスをメモリーにマップした後で開放されたときに記録されます。つまり、メモリーの使用状況に関するデバッグには有用ですが、通常の運用においては有用ではありません。そのためログレベルを debug に変更しました。
  • Ubuntu 17.10 Artful Aardvarkをサポート。

修正

  • [dat] データベースを拡張する際、意図せず大きなファイルが(ワーストケースで)作成されてしまうことのある不具合を修正しました。この不具合はインデックスカラムを頻繁に作成/削除を繰り返したときに発生する可能性があります。7.0.7ではこの不具合に関連して"大量にキーを削除したケースで table_create に失敗する"問題を修正しましたが、その修正が不十分なケースに対応しました。
  • [logical_select] offsetlimit が複数のシャードに対して適用されたとき、実際よりも少ないレコードが返される不具合を修正しました。

7.0.7リリース - 2017-09-29

改良

  • QUERY_NO_SYNTAX_ERROR+ のみのクエリーに指定したときにも動作するようにしました。以前のバージョンではそのようなクエリーはエラーになっていました。

  • [httpd] バンドルしているnginxのバージョンを1.13.5に更新しました。

  • [dump] 引数のデフォルト値を構文のセクションに追加しました。

  • [コマンドバージョン] --default-command-version 3 に対応しました。

  • 関数呼び出し時に検索結果をキャッシュできるようにしました。ほとんどの関数の呼び出し結果はキャッシュされます。例外は now()rand() を使った場合です。標準でキャッシュするように振る舞いを変更したので、新たにAPIを追加しました。

    • grn_proc_set_is_stable() を追加。
    • grn_proc_is_stable() を追加。

    呼び出しごとに結果が異なる関数を新規に追加する場合、grn_proc_is_stable(ctx, proc, GRN_FALSE) を呼ばなければなりません。もし呼ばなかった場合には、検索結果がキャッシュされるので、期待と異なり誤った結果を返します。

修正

  • [windows] database_unmap が実行される前のファイルハンドルのエラー処理を適切に行うようにしました。database_unmap 実行前にリクエストがキャンセルされた場合、排他制御部分が未初期化となる場合がありました。その場合、クラッシュしていました。

  • [トークナイザー] トークナイザー名のドキュメントを修正しました。TokenBigramIgnoreBlankSplitSymbolAlphaTokenBigramIgnoreBlankSplitSymbolAlphaDigit であるべきでした。

  • エラー時に空のファイルが残らないようにしました。

    以前のバージョンでは、空のファイルがエラー時に残っていました。

    再現するためのシナリオは以下です。:

    1. grn_fileinfo_open によりファイルの作成に成功する
    2. DO_MAP によりファイルマッピングに失敗する

    そのような場合、Groongaの管理下にないファイルのせいで「すでにファイルが存在します。」という別のエラーが発生します。そういったファイルは後始末の段階で削除すべきでした。

  • 短時間に多数の更新を行っている状況で検索した場合にクラッシュすることがある不具合を修正しました。

  • [table_create] 大量に削除されたキーがDATテーブルに存在する場合、table_create の実行に失敗する不具合を修正しました。

7.0.6リリース - 2017-08-29

改良

  • 前方一致検索を複数インデックスを指定してできるようになりました。 (例 --query "Foo*" --match_columns "TITLE_INDEX_COLUMN||BODY_INDEX_COLUMN")
  • [window_count] window_count 関数を追加しました。検索した結果にカウントした値を追加するのに使います。検索結果をもとに分析したり、カウント結果をもとにフィルタしたりすると便利です。
  • 以下のAPIを公開しました。
    • grn_obj_get_disk_usage() を追加。
    • GRN_EXPR_QUERY_NO_SYNTAX_ERROR を追加。
    • grn_expr_syntax_expand_query_by_table() を追加。
    • grn_table_find_reference_object() を追加。
  • [object_inspect] 指定したオブジェクトのディスク使用量を表示できるようになりました。
  • クエリーをパースする際にフォールバックする機能をサポートしました。 QUERY_NO_SYNTAX_ERROR フラグが query_flags に指定されていると有効になります。(標準では無効です) このフラグが設定されていると、シンタックスエラーが発生しなくなります。例えば、"A +" というクエリーは自動的にエスケープされて "A +" という扱いになります。この振る舞いはアプリケーションがユーザーの入力をそのまま検索語句として使い、シンタックスエラーやログに記録されないようにしたい場合に便利です。
  • クエリー内の語のスコアを調整できるようになりました。">", "<" と "~"がサポートされています。例えば ">Groonga" は "Groonga" のスコアをインクリメントします。"<Groonga" は "Groonga" のスコアをデクリメントします。"~Groonga" は検索結果についてマッチしたドキュメントのスコアをデクリメントします。"~" は検索結果そのものには影響しません。
  • テーブルを削除するときのパフォーマンスを改善しました。 thread_limit=1 する必要はありません。参照されているテーブルが存在するかチェックする処理をオブジェクトを開かなくてもできるようにしました。その結果としてパフォーマンスが改善しました。
  • [httpd] バンドルしているnginxのバージョンを1.13.4に更新しました。

修正

  • [dump] 7番目の引数 ( --sort_hash_table )が名前無しだと無視される不具合を修正しました。
  • [schema] コマンドラインパラメータの誤りを修正しました。source であるべきところが sources になっていました。[groonga-dev,04449] [むらたさんが報告]
  • [ruby_eval] ruby_evalコマンドがシンタックスエラーのときにクラッシュする問題を修正しました。 [GitHub#751] [ryo-pinusさんがパッチ提供]

感謝

  • murata satoshi
  • ryo-pinus

7.0.5リリース - 2017-07-29

改良

  • [httpd] バンドルしているnginxのバージョンを1.13.3に更新しました。セキュリティーに関する修正(CVE-2017-7529)を含んでいます。
  • [load] UInt64の最大値をロードできるようにしました。以前のバージョンでは意図せず0に変換されてしまっていました。
  • 以下のAPIを公開しました。
    • grn_window_get_size() [GitHub#725] [村上さんがパッチ提供]
  • [math_abs] 絶対値を計算するための math_abs() 関数を追加しました。 [GitHub#721]
  • grn_default_logger_set_path()grn_default_query_logger_set_path() をスレッドセーフにしました。
  • [Windows] バンドルしているpcreを8.41に更新しました。
  • [normalize] エラー時に冗長な空文字列が出力されないようにしました。
  • [functions/time] 0除算が発生したときにエラーメッセージを出力するようにしました。 [GitHub#733] [村上さんがパッチ提供]
  • [windows] ERROR_NO_SYSTEM_RESOURCES エラーを GRN_RESOURCE_TEMPORARILY_UNAVAILABLE にマッピングするようにしました。以前は rc=-1 をエラーコードとして返していました。ただし実際にどんな問題がおきたのかこれではわかりにくいので、 今回の修正では rc=-12 を返すようにしています。
  • [functions/min][functions/max] ベクターカラムをサポートしました。これでカラムがスカラーなのかベクターなのか気にせず使えるようになりました。 [GitHub#735] [村上さんがパッチ提供]
  • [dump] --sort_hash_table オプションをサポートしました。ハッシュテーブルの _key でのソートには --sort_hash_table yes を指定します。
  • [between] インデックスカラムを指定できるようになりました。 [GitHub#740] [村上さんがパッチ提供]
  • [load] Apache Arrow 0.5.0 以降をサポート。
  • [エラーメッセージの解析方法] エラーメッセージの解析方法のドキュメントを追加しました。
  • [Debian GNU/Linux] ソースからビルドするときに必要なパッケージのリストを更新しました。
  • [Ubuntu] Ubuntu 16.10(Yakkety Yak)のサポートをやめました。2017年7月20日でサポートが切れた(EOLになった)ためです。

修正

  • テキスト型( ShortText など)のベクターカラムに対するインデックスを正しく構築できるようにしました。この修正でインデックス更新後に全文検索でマッチしない問題が解決します。 [GitHub#494]
  • [thread_limit] thread_limit?max=1 というリクエストが同時にきたときにデッドロックが発生する問題を修正しました。
  • [groonga-httpd] デフォルトのPIDのパスと再起動時に想定しているPIDのパスがあっていない問題を修正しました。そのせいで groonga-httpd の再起動に失敗していました。 [GitHub#743] [sozakiさんが報告]

感謝

  • 村上さん

7.0.4リリース - 2017-06-29

改良

  • 物理的なファイルの作成/削除のログを障害の切り分けのために記録するようにしました。 [GitHub#700,#701]
  • [in_records] 固定長カラムの検索パフォーマンスを改善しました。速度が50%程度改善する可能性があります。
  • [grndb] --log-path オプションを追加しました。
  • [grndb] --log-level オプションを追加しました。
  • 以下のAPIを公開しました。
    • grn_operator_to_exec_func()
    • grn_obj_is_corrupt()
  • "固定長カラム 演算子 定数" というようなクエリのパフォーマンスを改善しました。対応している演算子は ==, !=, <, >, <=>= です。
  • "カラム 演算子 値 && カラム 演算子 値 && ..." というようなクエリのパフォーマンスを改善しました。
  • [grndb] grndb check で壊れたオブジェクトの検出をサポートしました。
  • [io_flush] --only_opened オプションをサポートしました。開いているデータベースオブジェクトのみをフラッシュすることができます。
  • [grndb] 参照先のない "inspect" オブジェクトの検出と削除をサポートしました。この状態はコマンド名が inspect から object_inspect に変更されたことによって発生していました。

修正

  • [rpm][centos] カスタマイズ版のビルドで意図しないマクロ展開が発生する問題を修正しました。この不具合はGroongaをSRPMからビルドする際にspecファイルの additional_configure_options パラメータを使ってリビルドするときのみ発生していました。
  • grn_table_setoperation() のNULLチェックを追加しました。インデックスが壊れている際に、クラッシュする可能性がありました。 [GitHub#699]

感謝

7.0.3リリース - 2017-05-29

改良

  • [select] インデックス名を指定した全文検索 のドキュメントを追加しました。
  • [インデックス] どのレコードに対するポスティングリストが長すぎるのかわかるように、警告メッセージをログに出すようにしました。
  • [load][dump] Apache Arrowをサポートするようにしました。 [GitHub#691]
  • [cmake] 静的ライブラリとしてビルドする際に、LZ4をリンクできるようにしました。 [Sergei Golubchikさんがパッチを提供]
  • [delete] キャンセルできるようにしました。
  • [httpd] バンドルしているnginxのバージョンを1.13.0に更新しました。
  • 以下のAPIを公開しました。
    • grn_plugin_proc_get_caller() を追加。
  • インデックスカラムに関連した関数とセレクタを追加しました。
    • 追加されたセレクタ: index_column_df_ratio_between()
    • 追加された関数: index_column_df_ratio()

修正

  • [delete] エラーが適切にクリアされていない不具合を修正しました。そのせいで、後続の削除処理に影響し意図しない振る舞いをしていました。
  • [windows] ファイルを O_CREAT フラグ付きで開くときに、IOのバージョンが正しく検出されない不具合を修正しました。
  • [vector_slice] (型のサイズが)4バイトでないベクターカラムをsliceできない不具合を修正しました。 [GitHub#695] [村上さんがパッチ提供]
  • (型のサイズが)4バイトでないベクターカラムでベクターの要素をインデックスで指定するとシーケンシャルサーチでマッチしない不具合を修正しました。 [GitHub#696] [村上さんがパッチ提供]
  • [logical_select] min に月の最終日を指定すると "argument out of range" が発生する不具合を修正しました。

感謝

  • Sergei Golubchikさん
  • 村上さん

7.0.2リリース - 2017-04-29

改良

  • [logical_select] drilldowns[${LABEL}].columns[${NAME}].window.sort_keysdrilldowns[${LABEL}].columns[${NAME}].window.group_keys で複数のキーを指定できるようになりました。
  • [Windows] バンドルしているLZ4を1.7.5に更新しました。
  • [cache] 永続化キャッシュをサポートしました。
  • [log_level] 英語のドキュメントを更新しました。
  • 以下のAPIを公開しました。
    • grn_set_default_cache_base_path()
    • grn_get_default_cache_base_path()
    • grn_persistent_cache_open()
    • grn_cache_default_open()
  • [groonga --cache-base-path] 永続キャッシュを使うための新しいオプションを追加しました。
  • [groonga-httpd] [groonga_cache_base_path] 永続キャッシュを使うための新しい設定を追加しました。
  • [Windows] バンドルしているmsgpackを2.1.1に更新しました。
  • [object_inspect] カラム情報を表示するだけでなく、インデックスカラムの統計情報も表示できるようにしました。
  • 正規表現の「 .* 」というパターンでインデックスを使って検索できるようになりました。 この機能はデフォルトで有効です。環境変数に GRN_SCAN_INFO_REGEXP_DOT_ASTERISK_ENABLE=no を設定すると無効化できます。
  • [in_records] 既存のテーブルを条件のパターンを指定するのに使うことのできる関数を追加しました。
  • [Ubuntu] EOLのため、Ubuntu 12.04のサポートをやめました。

修正

  • [logical_select] 異なるキャッシュが使われてしまう不具合を修正しました。この問題は動的カラムを使っているときに発生していました。
  • [logical_select] 動的カラムが作成されない不具合を修正しました。レコードにマッチしない場合に発生していました。
  • [reindex] reindexコマンドの実行によりデータが失われてしまう不具合を修正しました。
  • [httpd] 別のユーザーでワーカーを動かしている時、 quitshutdown のレスポンスが壊れている問題を修正しました。 [GitHub ranguba/groonga-client#12]

7.0.1リリース - 2017-03-29

改良

  • 以下のAPIを公開しました。
    • grn_ii_cursor_next_pos()
    • grn_table_apply_expr()
    • grn_obj_is_data_column()
    • grn_obj_is_expr()
    • grn_obj_is_scalar_column()
  • [column_copy] 参照型のベクタのダンプをサポートしました。
  • [load] array<object> スタイルの重み付きベクターカラムのloadをサポートしました。 array<object> の例: [{"key1": weight1}, {"key2": weight2}]
  • インデックスを使った !(XXX OPERATOR VALUE) の検索をサポートしました。演算子として > だけでなく、 >=<<===!= も使えます。
  • インデックスを使って !(column == CONSTANT) を検索できるようになりました。例えば !(column == 29) などです。
  • ! の最適化を以下のパターンでサポートしました。
    • !(column @ "X") && (column @ "Y")
    • (column @ "Y") && !(column @ "X")
    • (column @ "Y") &! !(column @ "X")
  • XXX || !(column @ "xxx") をインデックスを使って検索できるようになりました。
  • [dump] '{"x": 1, "y": 2}' というスタイルを参照されていない重み付きベクターカラムで使うようにしました。この変更は古いGroongaには影響しません。もともとサポートされているからです。
  • [実験的] GRN_ORDER_BY_ESTIMATED_SIZE_ENABLE 環境変数をサポートしました。この変数はクエリの最適化を予想されるヒット件数に応じて行うかどうかを切り替えるのに使用します。この機能はデフォルトでは無効です。有効にするには GRN_ORDER_BY_ESTIMATED_SIZE_ENABLE=yes を指定します。
  • [select] columnsdrilldown の評価結果をクエリログに追加するようにしました。
  • [select] drilldown のクエリログのフォーマットを変更しました。これは非互換な変更ですが、クエリログを変換するようなプログラムを独自に開発しているユーザー以外には影響ありません。
  • [table_remove] 一時的なメモリ使用量を削減しました。スレッドの最大数が0のときに有効になります。
  • [select] columns[LABEL](N) がクエリログのフォーマットとして使われます。以前は columns(N)[LABEL] でした。
  • [クエリ拡張] ベクターカラムを使った推奨例に更新しました。[ぐるなびさんが報告]
  • ロック中にリクエストがキャンセルされたことを検出できるようにしました。これは request_cancel がロック中に意図せず無視されないようにします。
  • [logical_select] initial および filtered 動的カラムをサポートしました。使用例は --columns[LABEL].stage initial--columns[LABEL].stage filtered です。
  • [logical_select] match_columnsquerydrilldown_filter オプションをサポートしました。
  • [highlight_html] 類似文書検索をサポートしました。
  • [logical_select] initial および filtered 動的カラムをサポートしました。使用例は --columns[LABEL].stage initial--columns[LABEL].stage filtered です。
  • [logical_select] 動的カラムでウィンドウ関数をサポートしました。
  • [select] 動的カラムに関するドキュメントを追加しました。
  • [ウィンドウ関数] ウィンドウ関数のセクションをドキュメントに追加しました。
  • [CentOS] EOLのため、CentOS 5のサポートをやめました。
  • [httpd] バンドルしているnginxのバージョンを1.11.12に更新しました。
  • ANDでのマッチ最適化を環境変数で無効化できるようにしました。この機能は GRN_TABLE_SELECT_AND_MIN_SKIP_ENABLE=no を設定することで無効化できます。デフォルトでは有効になっています。
  • [vector_new] 新規ベクターを作成するための関数を追加しました。
  • [select] drilldown_filter のドキュメントを追加しました。

修正

  • [lock_clear] テンポラリデータベースに対して実行するとクラッシュする不具合を修正しました。
  • 自然言語に対する動的インデックス更新でインデックスサイズが肥大化する問題を修正しました。Groonga 6.1.4から発生していました。
  • [select] "A && B.C @ X" というクエリでマッチすべきレコードを返さないことがある不具合を修正しました。
  • grn_io_flush()grn_io_expire() がコンフリクトする問題を修正しました。この修正がないと、 io_flushload が同時に特定のタイミングで実行されるとクラッシュする不具合がありました。
  • [logical_table_remove] 最大スレッド数が1のときにクラッシュする不具合を修正しました。

感謝

  • 株式会社ぐるなびさん

7.0.0リリース - 2017-02-09

改良

  • [in_values] 参照型ベクターカラムのシーケンシャルサーチに対応しました。 [GitHub#629] [村上さんがパッチ提供]
  • [select] 誤った drilldown[LABEL].sort_keys が指定されたとき、無視するのではなく、エラーを報告するようにしました。
  • [select] DBのメタデータを不必要に更新しないようにしました。 select コマンドを使っているだけなのにDBにロックがかかったままになってしまうのを防ぎます。
  • [lock_clear] lock_clear でDBのメタデータに対するロックも削除できるようにしました。
  • [CentOS] GroongaをAmazon LinuxでもインストールできるようにEPELをデフォルトで有効にするようにしました。
  • [query] default_mode オプションで "@X" スタイルのエイリアスが使えるようになりました。
  • [query] 動作モードのリストに関するドキュメントを更新しました。動作モードの既定値は MATCH ("@") で全文検索を実行します。
  • [rpm][centos] CentOS 7で groonga-token-filter-stem パッケージを提供するようにしました。 ステミングに対応するための TokenFilterStem トークンフィルターを提供します。 [GitHub#633] [Tim Bellefleurさんが報告]
  • [window_record_number] record_number が非推奨になりました。代わりに window_record_number を使ってください。 record_number は互換性のためだけに残っています。
  • [window_sum] window_sum ウィンドウ関数を追加しました。PostgreSQLのsum()と同様のウィンドウ関数を提供します。
  • TABLE_DAT_KEY テーブルをインメモリで使ったときに静的インデックス構築をできるようにしました。 [GitHub#623] [村上さんが報告]
  • バンドルしている鬼雲を6.1.1へと更新しました。
  • columns[LABEL].window.group_keys をサポートしました。ウィンドウ関数をグループごとに提供することができます。
  • [load] 誤ったキーが指定されていたときにエラーを報告するようにしました。キーの型が異なっている場合でも気付けるようになります。
  • [load] --output_errors yes オプションをサポートしました。"yes"を指定すると、どのレコードのloadに失敗したのかエラーを取得できるようになります。この機能を使う場合には、コマンドバージョン3を指定します。
  • [load] キーのキャストに失敗したときのエラーメッセージをわかりやすくしました。以前は単に "cast failed" と表示していましたが、テーブルのキーの型とキャスト対象となるキーの型もメッセージに含まれるようになりました。
  • [httpd] バンドルしているnginxのバージョンを1.11.9に更新しました。

修正

  • 存在しないソートキーを drilldowns[LABEL]slices[LABEL] に指定するとJSONパースエラーとなる不具合を修正しました。 [GitHub#627] [村上さんがパッチ提供]
  • 存在しないグループのサブレコードにアクセスしようとするとクラッシュする不具合を修正しました。例えば、 drilldowns[LABEL].sort_keys _sumcalc_types の指定なしに使っていた場合に問題が発生していました。 [GitHub#625] [村上さんがパッチ提供]
  • tokenizerでエラーが発生するとクラッシュする不具合を修正しました。tokenizer と token filterを登録していて、tokenizer にエラーがあると発生していました。
  • [window_record_number] ウィンドウ関数の引数が正しく渡されていない不具合を修正しました。 [GitHub#634] [村上さんがパッチ提供]

感謝

  • 村上さん
  • aomi-nさん

古いリリース