お知らせ - 9系#

9.1.2リリース - 2020-01-29#

改良#

  • [tools] 指定したテーブルまたはカラムのファイルのみをコピーするスクリプトを追加しました。

    • このスクリプトの名前は、copy-related-files.rbです。

    • このスクリプトは非常に大きいデータベースから指定したテーブルまたはカラムを抽出したい場合に便利です。

    • 特定のテーブルまたはカラムに関連するファイルは、障害の再現に必要なことがあります。

    • データベースをまるごと提供するのが難しい場合は、このツールを使って対象のテーブルまたはカラムに関連するファイルを抽出できます。

  • [shutdown] 全てのスレッドが使われている場合でも、 /d/shutdown?mode=immediate を即時受け付けるようにしました。

    • この機能はGroonga HTTPサーバでのみ使えます。

  • GRN_ENABLE_REFERENCE_COUNT=yes を使うと、使用していないオブジェクトをすぐに開放します。

    • この機能は実験的です。パフォーマンスが低下します。

    • 多くのテーブルにまたがるデータをロードする際等にメモリーの使用量を一定量に保つ効果が期待できます。

  • [CentOS] groonga-release パッケージをバージョンごとに用意しました。

    • インストール方法に少し変更があるので注意してください。

  • [Debian GNU/Linux] Groongaのaptリポジトリーの追加に groonga-archive-keyring を使うようにしました。

    • この改善によって、Groongaのaptリポジトリーを簡単に追加できます。

    • groonga-archive-keyring はGroongaのaptリポジトリーを使うための全ての情報が入っています。そのため、リポジトリー情報やPGPキーの変更を意識する必要がありません。

    • groonga-archive-keyring はdebパッケージなので、 apt update で簡単に更新できます。

9.1.1リリース - 2020-01-07#

改良#

  • [load] Apache Arrow 形式のデータをサポートしました。

    • Apache Arrow形式のデータを使うことで、パースのコストを削減でき、他のフォーマットより高速にデータをロードできる可能性があります。

    • この変更によって、他のデータ分析システムからApache Arrow形式のデータを直接Groongaへ入力することもできます。

    • Apache Arrow形式のフォーマットはHTTPインターフェイスでのみ使えます。コマンドラインインターフェイスでは使えません。

  • [load] Apache Arrow 形式のロード方法をドキュメントに追加しました。

  • [load] エラーメッセージを改善しました。

    • load コマンドのレスポンスにエラーメッセージも含むようにしました。

    • この変更によって、データのロードに失敗した場合、 load コマンドのエラーの詳細を出力します。

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

  • [Groonga HTTPサーバー] HTTPリクエストのbodyにコマンドのパラメータを指定できるようにしました。

    • この場合、 Content-Typeapplication/x-www-form-urlencoded を指定しなければいけません。

  • [Groonga HTTPサーバー] HTTP POST の使用方法をドキュメントに追加しました。

9.1.0リリース - 2019-11-29#

改良#

  • "&&"演算のパフォーマンスを改善しました。

    • 例えば、以下のような条件式のパフォーマンスが向上します。

    • ( A || B ) && ( C || D ) && ( E || F) ...

  • [TokenMecab] TokenMecabuse_base_form オプションを追加しました。

    • このオプションによってトークンの原型を使って検索できます。

    • 例えば、このオプションを使って"支えた"を検索した場合、"支える"もヒットします。

修正#

  • インデックスがアクセサーの際にパフォーマンスが低下する問題を修正しました。

    • 例えば、以下のような条件を含むクエリーで起こります。

      • accessor @ query

      • accessor == query

  • バッファーが十分に大きい時に、検索結果の推定サイズがオーバーフローする問題を修正しました。 [PGroonga#GitHub#115][Albert Songさんの報告]

  • test(1)のポータビリティを改善しました。(おばたさんがパッチ提供)

  • 不足しているツールを追加

    • 前のバージョンに index-column-diff-all.shobject-inspect-all.sh がバンドルされていなかったためです。

感謝#

  • Albert Songさん

  • おばたさん

9.0.9リリース - 2019-10-30#

注釈

今回のバージョンからパフォーマンスが低下しているかもしれません。もし、以前よりパフォーマンスが低下していたら、是非、再現手順を報告してほしいです。

改良#

  • [ログ] 応答の送信時間をクエリーログに出力するように改良しました。

  • [status] status コマンドの応答に現在のジョブ数を追加しました。

  • [groonga-httpd] $request_time をサポートしました。

    • 以前のバージョンでは、 log_format ディレクティブに $request_time を指定しても、$request_time の値は常に0でした。

    • 今回のバージョンから、 $request_time を指定した場合、 groonga-httpd は正しい時間を出力します。

  • [groonga-httpd] $request_time の設定方法をドキュメントに追加しました。

  • Ubuntu 19.10(Eoan Ermine)をサポートしました。

  • CentOS 8をサポートしました。(実験的)

    • CentOS 8向けのパッケージは開発用のパッケージが不足しているため、一部の機能が使えません。(例えば、 TokenMecab が使えなかったり、JSON文字列からint32のベクターへのキャストが出来なかったりします。)

  • [tools] index_column_diff コマンドを簡単に実行するスクリプトを追加しました。

    • このスクリプトの名前は、index-column-diff-all.shです。

    • このスクリプトは、Groongaのデータベースからインデックスカラムを抽出し、抽出したインデックスカラムに対して index_column_diff を実行します。

  • [tools] object_inspect コマンドを全てのオブジェクトに対して実行するスクリプトを追加しました。

    • このスクリプトの名前は、object-inspect-all.shです。

修正#

  • between の最初の引数として値を指定すると、Groongaがクラッシュする問題を修正しました。[GitHub#1045][yagisumiさんの報告]

感謝#

  • yagisumiさん

9.0.8リリース - 2019-09-27#

改良#

  • [log_reopen] 2つ以上のワーカーで groonga-httpd を使用する場合の補足説明を追記しました。

  • 作成中のインデックスを無視するように改良しました。

    • インデックス構築中であっても、正しい検索結果を取得できます。

    • ただし、この場合、Groongaは検索にインデックスを使用しないため、検索は遅くなります。

  • [sub_filter] 対象のカラムのインデックスが作成中か、または、インデックスが無い時に sub_filter がシーケンシャルサーチを実行する機能を追加しました。

    • 以前のバージョンでは、上記の状態の場合、 sub_filter はエラーになりました。

    • 今回のバージョンから、 上記の状態でも sub_filter は検索結果を返します。

    • ただし、上記の状態の場合、 sub_filter は、シーケンシャルサーチで実行されるため遅いです。

  • [CentOS] CentOS 6の32-bitパッケージのサポートをやめました。

修正#

  • [logical_range_filter] レコードが十分にあるとき、かつフィルター条件にマッチしないレコードが推定値を超えた時に、同じオブジェクトを2回閉じるという例外が発生する問題を修正しました。

9.0.7リリース - 2019-08-29#

改良#

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

    • CVE-2019-9511、CVE-2019-9513、CVE-2019-9516のセキュリティの修正が含まれています。

修正#

  • ポスティングリストが巨大になった時にGroongaがクラッシュする問題を修正しました。

    • ただし、このバグは、一般的なデータでは殆ど発生しません。ポスティングリストは、一般的なデータでは、そこまで大きくならないためです。

  • 動的カラムのステージに initial を指定し、インデックスを使用した検索をすると空の結果を返す問題を修正しました。 [GitHub#683]

  • configure時にlibeditがインストールされているにもかかわらず、検知しない問題を修正しました。 [GitHub#1030][yuさんがパッチ提供]

  • --slices--sort_keys オプション使用時に --offset--limit オプションが動作しない問題を修正しました。 [clear-code/redmine_full_text_search#70][a9zawaさんの報告]

  • select コマンドの結果が巨大な時、検索結果が空になる問題を修正しました。[groonga-dev,04770][Yutaro Shimamuraさんの報告]

  • 前方一致検索や後方一致検索時に適切なインデックスを使わない問題を修正しました。[GitHub#1007, PGroonga#GitHub#96][oknjさんの報告]

感謝#

  • oknjさん

  • Yutaro Shimamuraさん

  • yuさん

  • a9zawaさん

9.0.6リリース - 2019-08-05#

改良#

  • Debian 10 (buster)をサポートしました。

修正#

  • [select] 検索エスカレーションが起こった際に検索がエラーになるバグを修正しました。

  • [select] ネストされた等価演算を使った際に、誤った検索結果を返すことがあるバグを修正しました。

  • [geo_distance_location_rectangle] load のフォーマットが誤っている例を修正しました。 [GitHub#1023] [yagisumiさんがパッチ提供]

  • [マイクロブログ検索システムの作成] 検索結果が誤っている例を修正しました。[GitHub#1024][yagisumiさんがパッチ提供]

感謝#

  • yagisumiさん

9.0.5リリース - 2019-07-30#

警告

このリリースには影響の大きい不具合があることがわかりました。select コマンドが誤った結果を返します。この問題を修正し、9.0.6をリリースする予定です。Groonga 9.0.5は使わず、後日リリースされる9.0.6を使ってください。問題の詳細については https://groonga.org/ja/blog/2019/07/30/groonga-9.0.5.html で解説しています。

改良#

  • [logical_range_filter] 検索対象のシャードが十分に大きい時にのみ最適化を適用するように改良しました。

    • この機能は、ソートキーが同じ時にオフセット間で検索結果が重複するのを減らします。

    • 十分に大きいのしきい値はデフォルトで10000レコードです。

  • [ノーマライザー] NormalizerNFKC100 に新しいオプション unify_to_katakana を追加しました。

    • このオプションは、平仮名を片仮名にノーマライズします。

    • 例えば、 ゔぁゔぃゔゔぇゔぉヴァヴィヴヴェヴォ にノーマライズします。

  • [select] slicesパラメーターでdrilldownsをサポートしました。

  • [select] slicesパラメーターでcolumnsをサポートしました。

  • [select] initialステージ内でslicesパラメーターが _score を参照できるよう改良しました。

  • [highlight_html], [snippet_html] slicesパラメータ指定時に、slices実行前の式からもキーワードを抽出するように改良しました。

  • slicesパラメータ指定時に、slices実行前の式からもスコアーを収集するように改良しました。

  • ポスティングリストにポスティングを追加する際に自動的にスコアーを1増やすのをやめました。

    • grn_ii_posting_add は、この変更によって後方互換性がなくなりました。互換性を保つには、呼び出し側でスコアーを増やす必要があります。

  • XXX.YYY.ZZZ == AAA のようなネストされた等価演算のインデックス検索をサポートしました。

  • ハッシュテーブル使用時にハッシュの再構築の間隔を少なくしました。

    • この昨日によって、結果出力のパフォーマンスが改善します。

  • クエリーログにプレフィックスを追加できるようになりました。

    • どの条件のフィルターなのかわかりやすくなります。

  • Apache Arrow 1.0.0 をサポートしました。

    • ただし、このバージョンはまだ、リリースされていません。

  • Amazon Linux 2 をサポートしました。

修正#

  • "[1, 2, 3]" のようなJSONのベクター値がインデックスされないバグを修正しました。

  • table_create のテストのパラメーター名が誤っていたバグを修正しました。[GitHub#1000][yagisumiさんがパッチ提供]

  • command_version=3 でdrilldownコマンドが実行された際に、ドリルダウンのラベルが空になるバグを修正しました。[GitHub#1001][yagisumiさんの報告]

  • MinGWでWindows版のパッケージのビルドが失敗するバグを修正しました。

  • MinGWのWindows版パッケージにCOPYINGがインストールされないバグを修正しました。

  • ハイライト対象として、クエリーにテキスト以外を指定した際に、キーワードがハイライトされないバグを修正しました。

  • [object_inspect] のMessagePack形式の出力が壊れるバグを修正しました。[GitHub#1009][yagisumiさんの報告]

  • index_column_diff のMessagePack形式の出力が壊れるバグを修正しました。[GitHub#1009][yagisumiさんの報告]

  • [suggest] のMessagePack形式の出力が壊れるバグを修正しました。[GitHub#1011][yagisumiさんの報告]

  • パトリシアトライのテーブルの検索時などにreallocのサイズが十分に確保されないバグを修正しました。[島津製作所さんの報告]

    • Groongaはこのバグでクラッシュする可能性があります。

  • groonga-release version 1.5.0より前から1.5.0-1へアップデートした際に groonga.repo が削除されるバグを修正しました。[groonga-talk:429][Josep Sanzさんの報告]

感謝#

  • yagisumiさん

  • 島津製作所さん

  • Josep Sanzさん

9.0.4リリース - 2019-06-29#

改良#

  • 配列リテラルの複数要素をサポートしました。

  • ベクターの等価演算をサポートしました。

  • [logical_range_filter] 出力するクエリーログを追加しました。

    • logical_range_filter コマンドが、以下のタイミングでログを出力するようになります。

      • logical_range_filter によるフィルター後

      • logical_range_filter によるソート後

      • 動的カラム適用後

      • 結果出力後

    • この機能によって、このコマンドがどこまで完了したかを見ることができます。

  • [トークナイザー] TokenPattern の説明をドキュメントに追加しました。

  • [トークナイザー] TokenTable の説明をドキュメントに追加しました。

  • [トークナイザー] TokenNgram の説明をドキュメントに追加しました。

  • [grndb] groonga.logへの操作ログの出力を追加しました。

    • grndb コマンドが実行結果と実行過程を出力するようになります。

  • [grndb] 空のファイルのチェックをサポートしました。

    • この機能によって、空のファイルが存在するかどうかをチェックできます。

  • [grndb] 新しいオプション --since を追加しました。

    • 検査の範囲を指定できます。

  • [grndb] 新しいオプション --since についてのドキュメントを追加しました。

  • RapidJSONをバンドルしました。

    • 部分的にGroongaのJSONパーサーとしてRapidJSONを使うことができます。(この機能はまだ部分的です。)

    • これを使うことでより厳格なJSONのパースができます。

  • JSON文字列からint32のベクターへのキャストをサポートしました。

    • この機能は、RapidJSONが必要です。

  • [query] default_operator を追加しました。

    • "keyword1 keyword2"時の演算子をカスタマイズできます。

    • デフォルトでは、"keyword1 keyword2"はAND演算です。

    • "keyword1 keyword2"の演算子をAND以外に変更できます。

修正#

  • [optimizer] 複数のfilter条件と xxx.yyy=="keyword" のような条件を指定した際にエラーが発生するバグを修正しました。

  • GroongaのWindows用のパッケージ(VC++版)に不足していたライセンスファイルを追加しました。

  • GroongaのWindows用のパッケージ(VC++版)UCRTランタイムを追加しました。

  • [ウィンドウ関数] メモリリークを修正しました。

    • これは、複数のウインドウに対してソートキーを適用した際に発生します。 [Takashi Hashidaさんがパッチ提供]

感謝#

  • Takashi Hashidaさん

9.0.3リリース - 2019-05-29#

改良#

  • [select] より多くのクエリーログを追加しました。

    • select コマンドが、以下のタイミングでログを出力するようになります。

      • ドリルダウンによるソート後

      • ドリルダウンによるフィルター後

    • この機能によって、このコマンドがどこまで完了したかを見ることができます。

  • [logical_select] より多くのクエリーログを追加しました。

    • logical_select コマンドが、以下のタイミングでログを出力するようになります。

      • 動的カラム作成後

      • ドリルダウンによるグループ化後

      • ドリルダウンによるソート後

      • ドリルダウンによるフィルター後

      • logical_select によるソート後

    • この機能によって、このコマンドがどこまで完了したかを見ることができます。

  • [logical_select] limit オプションを使用したときのソートのパフォーマンスを少し改善しました。

  • [index_column_diff] パフォーマンスを改善しました。

    • このコマンドの実行速度を大幅に短くしました。

  • [index_column_diff] 無効な参照を無視するように改良しました。

  • [index_column_diff] ベクター要素の重複に対応しました。

  • [Normalizers] Unicode 12.1 の NFKC(Normalization Form Compatibility Composition)をベースにしたノーマライザー NormalizerNFKC121 を追加しました。

  • [TokenFilters] Unicode 12.1 の NFKC(Normalization Form Compatibility Composition)をベースにしたトークンフィルター NormalizerNFKC121 を追加しました。

  • [grndb] 新しいオプション --log-flags を追加しました。

    • groonga実行ファイルと同様、ログに出力する項目を指定できます。

    • サポートされているログフラグについては、[groonga 実行ファイル] を参照してください。

  • [snippet_html] 検索にマッチしない時の戻り値を変更する新しいオプションを追加しました。

  • [plugin_unregister] Windowsのフルパスをサポートしました。

  • 複数行のログメッセージをサポートしました。

    • この機能によって、複数行に渡るログメッセージが見やすくなります。

  • インデックスを使って検索した際、キーをGroongaのログに出力するようにしました。

  • [match_columnsパラメータ] インデックスの重みのドキュメントを追加しました。

  • [logical_range_filter] order パラメータの説明を追加しました。

  • [object_inspect] 新しい統計 INDEX_COLUMN_VALUE_STATISTICS_NEXT_PHYSICAL_SEGMENT_IDINDEX_COLUMN_VALUE_STATISTICS_N_PHYSICAL_SEGMENTS の説明を追加しました。

  • Ubuntu 14.04 のサポートをやめました。

修正#

  • [index_column_diff] remains を多く報告するバグを修正しました。

  • --without-onigmo オプションを使った際にビルドエラーになるバグを修正しました。[GitHub#951] [Tomohiro KATOさんが報告]

  • "CVE: 2019-11675"の脆弱性を修正しました。[Wolfgang Hotwagnerさんが報告]

  • Windows版のGroongaにて、拡張パスプレフィックス \\?\ を削除しました。[GitHub#958] [yagisumiさんが報告]

    • この拡張プレフィックスは、プラグインを正確に見つけられないというバグを引き起こします。

感謝#

  • Tomohiro KATOさん

  • Wolfgang Hotwagnerさん

  • yagisumiさん

9.0.2リリース - 2019-04-29#

このリリースからVC++で作成したWindows版パッケージを提供します。

今までどおり、MinGWで作成したWindows版パッケージも提供しますが、近いうちにMinGWで作ったパッケージの代わりにVC++で作ったパッケージを提供する予定です。

改良#

  • [column_create] 新しいフラグ INDEX_LARGE を追加しました。

    • このフラグによって、デフォルトの2倍の領域を持つインデックスカラムを作成できます。

    • ただ、メモリ使用量も2倍となることに注意して下さい。

    • このフラグは、インデックス対象のデータが大きい時に有用です。

    • 大きいデータとは、大量のレコード(通常は少なくとも1000万レコード以上)があり、少なくとも次のうちの1つ以上の特徴があります。

      • インデックス対象が複数のカラム

      • インデックステーブルにトークナイザーが付いている

  • [object_inspect] セグメントの新しい統計値 next_physical_segment_idmax_n_physical_segments を追加しました。

    • この情報で、インデックスカラムの領域の使用量とインデックスカラムの領域の最大値を確認できます。

  • [logical_select] シャードをまたがったウィンドウ関数をサポートしました。

  • [logical_range_filter] シャードをまたがったウインドウ関数をサポートしました。

  • [logical_count] シャードをまたがったウインドウ関数をサポートしました。

  • このリリースからVC++で作成したWindows版パッケージを提供するようにしました。

  • [io_flush] 新しいオプション --recursive dependent を追加しました。

    • 指定した書き出し対象オブジェクトとその子オブジェクトすべて、参照先のテーブル、インデックスが張られているカラムがある場合、対応するインデックスカラムとそのインデックスカラムのテーブルを書き出し対象オブジェクトにできます。

修正#

  • 一部の環境でコンパイルエラー "unknown type name 'bool'" が発生する問題を修正しました。

  • mrubyを経由して実行するコマンド(例えば、 logical_selectlogical_range_filterlogical_count 等)で、Int32を超える数を正しく出力できない問題を修正しました。[GitHub#936] [HashidaTKSさんがパッチ提供]

感謝#

  • HashidaTKSさん

9.0.1リリース - 2019-03-29#

改良#

  • ベクターの値にnullが使えるようになりました。

    • select ... --columns[vector].flags COLUMN_VECTOR --columns[vector].value "null" のように使用できます。

  • [dump] ドキュメントを英語に翻訳しました。

  • 無効なインデックスのチェックとログへの記録を強化しました。インデックス関連のバグを発見するのに役立ちます。

  • 8.0.6リリース - 2018-08-29GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO の説明を改善しました。

  • [select] 新しい引数 --load_table--load_columns--load_values を追加しました。

    • select の結果を --load_table で指定したテーブルへ格納できます。

    • --load_values オプションは、select の結果のカラムを指定します。

    • --load_columns オプションは、--load_table で指定したテーブルのカラムを指定します。

    • このようにして、--load_values で指定したカラムの値を、 --load_columns で指定したカラムへ格納できます。

  • [select] 新しい引数 --load_table--load_columns--load_values を追加しました。

  • [load] ロード先のテーブルをクエリーログに表示するようにしました。

    • 以下のように、ロード先のテーブル名は [] 内の文字列として表示します 。

    • :000000000000000 load(3): [LoadedLogs][3]

  • 以下のAPIを追加しました。

    • grn_ii_get_flags()

    • grn_index_column_diff()

    • grn_memory_get_usage()

  • 壊れたインデックスをチェックするためのコマンド index_column_diff を追加しました。コマンド実行の進捗を記録したい場合は、ログレベルをdebugに設定してください。

修正#

  • [snippet_html] 一致しない場合、空のベクターを返すよう変更しました。

    • そのような場合、 null の代わりに空のベクター [] が返されます。

  • スレッドカウントがオーバフローする可能性についての警告を修正しました。実運用では、膨大な数のスレッドが使用されていないため、ユーザーに影響はありません。[GitHub#904]

  • maxOSでのビルドエラーを修正しました。 [GitHub#909] [shiro615さんが報告]

  • ストップワードの処理のバグを修正しました。

    • このバグは、クエリーの最初のトークンをストップワードとして設定すると発生します。

    • このバグが発生した場合、検索クエリーはヒットしません。

  • [全体設定] grn_lock_set_timeout のパラメーター名の誤字を修正しました。

  • インデックスの破損によって、削除されたレコードがマッチするバグを修正しました。

    • 大量のレコードを追加または、削除した時に発生することがあります。

  • logical_range_filter がレコードを返さない場合のメモリリークを修正しました。[GitHub#911] [HashidaTKSさんがパッチ提供]

  • ロードしているデータが正しくノーマライズされないことによってクエリーにマッチしないバグを修正しました。[PGroonga#GitHub#93, GitHub#912,GitHub#913] [kamicupさんとdodaisukeさんが報告]

    • このバグは、カタカナの後ろに空白のあるデータをロードし、ノーマライザーに unify_kana オプションが使用された時に発生します。

  • インデックスの更新中にインデックスが破損するバグを修正しました。

    • 長期間、大量のレコードの追加、削除を繰り返した時に発生することがあります。

  • インデックス更新時に十分な作業領域を確保できずにクラッシュするバクを修正しました。

感謝#

  • shiro615さん

  • HashidaTKSさん

  • kamicupさん

  • dodaisukeさん

9.0.0リリース - 2019-02-09#

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

改良#

  • [トークナイザー] 新しいトークナイザー TokenPattern を追加しました。

    • 正規表現を使ってトークンを抽出できます。

      • このトークナイザーは正規表現にマッチしたトークンのみを抽出します。

    • 正規表現のパターンは複数指定できます。

  • [トークナイザー] 新しいトークナイザー TokenTable を追加しました。

    • 既存のテーブルのカラムの値を使ってトークンを抽出できます。

  • [dump] バイナリデータのダンプに対応しました。

  • [select] インデックスカラムに対する類似文書検索をサポートしました。

    • マルチカラムインデックスを使用している場合、この機能を使って、全てのソースカラムに対して類似文書検索ができます。

  • [ノーマライザー] NormalizerNFKC100 に新しいオプション remove_blank を追加しました。

    • このオプションは空白を取り除きます。

  • [groonga 実行ファイル] ログ内のThreadIDの表示を改善しました。

    • Windows版では、ProcessIDとThreadIDを混同しやすかったので、どちらがThreadIDでどちらがProcessIDかを明確にしました。