お知らせ - 8系#

8.1.1リリース - 2019-01-29#

改良#

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

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

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

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

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

  • インデックスの更新エラー時のログを改善しました。

    • ログに、より詳細な情報を追加しました。

      • 例えば、ポスティングリストのマージに失敗した時にマージ元のバッファーとチャンクを出力します。

      • また、バッファー確保のエラーが発生した時は、バッファーの空き領域と要求サイズをログに出力します。

  • [groonga 実行ファイル] 新しいオプション --log-flags を追加しました。

    • Groongaのログに出力する項目を指定できます。

    • 以下のような項目を出力できます。

      • タイムスタンプ

      • ログメッセージ

      • ロケーション(ログが出力された場所)

      • プロセスID

      • スレッドID

    • 以下のように接頭辞を指定できます。

      • +

        • この接頭辞は、 "フラグを追加する"という意味です。

      • -

        • この接頭辞は、"フラグを削除する"という意味です。

      • 接頭辞無しは、"存在しているフラグを置き換える"という意味です。

    • 具体的には、以下のようにフラグ指定できます。

      • none

        • ログに何も出力しません。

      • time

        • ログにタイムスタンプを出力します。

      • message

        • ログにメッセージを出力します。

      • location

        • ログの出力場所(ファイル名、行数、関数名)とプロセスIDを出力します。

      • process_id

        • ログにプロセスIDを出力します。

      • pid

        • このフラグは、 process_id のエイリアスです。

      • thread_id

        • ログにスレッドIDを出力します。

      • all

        • このフラグは、 nonedefault 以外の全てのフラグを指定します。

      • default

        • ログに、タイムスタンプとログメッセージを出力します。

    • | を使って、複数のフラグを指定することもできます。

修正#

  • インデックスの更新エラー発生時にメモリリークする問題を修正しました。

  • [ノーマライザー] ステートレスなノーマライザーとステートフルなノーマライザーを同時に使用した時に、それらが誤った結果を返すバグを修正しました。

    • ステートレスなノーマライザーとは以下です。

      • unify_kana

      • unify_kana_case

      • unify_kana_voiced_sound_mark

      • unify_hyphen

      • unify_prolonged_sound_mark

      • unify_hyphen_and_prolonged_sound_mark

      • unify_middle_dot

    • ステートフルなノーマライザーとは以下です。

      • unify_katakana_v_sounds

      • unify_katakana_bu_sound

      • unify_to_romaji

8.1.0リリース - 2018-12-29#

改良#

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

修正#

  • io_flush コマンド実行後に、DBに対するアンロックが常にフラッシュの実行後になってしまうバグを修正しました。

  • 参照先を持たないレコードを持つテーブルに対して reindex コマンドを実行した際に、 reindex コマンドが終了しないバグを修正しました。

8.0.9リリース - 2018-11-29#

改良#

  • [トークナイザー] トークナイザーの作成に失敗した際のエラーメッセージにトークナイザーの名前を出力するよう改良。

  • [トークナイザー][TokenDelimit] トークンの区切り文字のカスタマイズをサポートしました。

    • 空白以外のトークンを区切り文字に使えます。

  • [トークナイザー][TokenDelimit] 新しいオプション pattern を追加しました。

    • このオプションにより、区切り文字にに正規表現を指定できます。

  • [トークナイザー] 各トークンの情報に force_prefix_search の値を追加しました。

    • "force_prefix" は後方互換のため残しています。

  • [トークンフィルター] ビルトインのトークンフィルタ TokenFilterNFKC100 を追加しました。

    • NormalizerNFKC100のように unify_kana オプションで、カタカナをひらがなへ変換できます。

  • [トークンフィルター][TokenFilterStem] 新しオプション algorithm を追加しました。

    • このオプションによって、英語以外の言語(フランス語、スペイン語、ポルトガル語、イタリア語、ルーマニア語、ドイツ語、オランダ語、スウェーデン語、ノルウェー語、デンマーク語、ロシア語、フィンランド語)をステミングできます。

  • [トークンフィルター][TokenFilterStopWord] 新しいオプション column を追加しました

    • このオプションによって、is_stop_word以外のカラムをスットプワードに指定できます。

  • [dump] トークンフィルターのオプションの出力をサポートしました。

    • TokenNgramTokenMecab 等のようなオプションを持つトークナイザーを指定した場合、それらのオプションも table_list コマンドで出力できます。

  • [truncate] トークンフィルターのオプションを持ったテーブルをサポートしました。

    • TokenFilterStemTokenStopWord 等のようなオプションを持つトークナイザーを持つテーブルでも truncate できます。

  • [schema] トークンフィルターのオプションの出力をサポートしました。

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

    • このオプションによって、ひらがなとカタカナをローマ字に正規化できます。

  • [query-log][show-condition] "func() > 0"をサポートしました。

  • [Windows] アンマップ前のフラッシュを確実にするよう改善しました。

  • ファイル入力のエラーメッセージを改善しました。

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

    • CVE-2018-16843とCVE-2018-16844のセキュリティの修正が含まれています。

修正#

  • ウインドウ関数を評価する際にメモリリークする問題を修正しました。

  • [groonga-httpd] ログの内容が混在することがあるバグを修正しました。

  • output_columnsのスライスのエラーが発生した際に、無効なJSONが生成されるバグを修正しました。

  • ネストして参照されているベクターカラムの値を取得する際にメモリリークする問題を修正しました。

  • インデックス破損を警告するログを出力する際にクラッシュするバグを修正しました。

  • 式の評価で一時的なベクターが再利用された時にクラッシュするバグを修正しました。

    • 例えば、以下のようにベクターを使った式を評価する時にクラッシュします。

    _score = _score + (vector_size(categories) > 0)

  • deleteコマンドで削除したベクターカラムの値がヒットするバグを修正しました。[dodaisukeさんの報告]

感謝#

  • dodaisukeさん

8.0.8リリース - 2018-10-29#

改良#

  • [table_list] デフォルトトークナイザーのオプションをサポートしました。

    • TokenNgramTokenMecab 等のようなオプションを持つトークナイザーを指定した場合、それらのオプションも table_list コマンドで出力できます。

  • [select] record @ 'query' を使ったシーケンシャルマッチでノーマライザーのオプションをサポートしました。

  • [truncate] トークナイザーのオプションを持ったテーブルをサポートしました。

    • TokenNgramTokenMecab 等のようなオプションを持つトークナイザーを持つテーブルでも truncate できます。

  • [トークナイザー][TokenMecab] TokenMecabtarget_class オプションを追加しました。

    • このオプションは、指定した品詞のトークンを検索します。例えば、名詞のみを検索することができます。

    • このオプションは、以下のようにサブクラスを指定することや、 +- を使って、特定の品詞を追加または除外することもできます。したがって、以下のように代名詞を除外して検索することもできます。

      'TokenMecab("target_class", "-名詞/代名詞", "target_class", "+")'

  • [io_flush] io_flush 中のデータベースのロックをサポートしました。

    • io_flush 実行中に io_flush 対象のテーブルを削除するとGroongaがクラッシュする問題があったためです。

  • [cast_loose] 新しい関数 cast_loose() を追加しました。

    • この関数は、指定した型へキャストします。もし、指定した値がキャストできない場合、値は、指定したデフォルト値になります。

  • 条件式の評価順序の最適化を追加しました。(実験的)

    • 以下のように環境変数を設定することでこの機能を有効にできます。

      GRN_EXPR_OPTIMIZE=yes

  • インデックス検索可能な正規表現に (?-mix:XXX) 記法をサポートしました。 [groonga-dev,04683][ Masatoshi SEKIさんの報告]

    • (?-mix:XXX) は XXX と同じ扱いです。

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

  • Ubuntu 18.10 (Cosmic Cuttlefish)をサポートしました。

修正#

  • Groonga GQTP サーバーが新しい接続を受け付けなくなることがあるバグを修正しました。[groonga-dev,04688][Yutaro Shimamuraさんの報告]

    • quitを使わずにクライアントプロセスを中断した時に発生します。

感謝#

  • Masatoshi SEKIさん

  • Yutaro Shimamuraさん

8.0.7リリース - 2018-09-29#

改良#

  • [トークナイザー][TokenMecab] Mecabのメタデータの出力をサポートしました。

    • TokenMecabinclude_class オプションを追加しました。

      このオプションは、Mecabのメタデータの classsubclass を出力します。

    • TokenMecabinclude_reading オプションを追加しました。

      このオプションは、Mecabのメタデータの reading を出力します。

    • TokenMecabinclude_form オプションを追加しました。

      このオプションは、Mecabのメタデータの inflected_typeinflected_formbase_form を出力します。

    • TokenMecabuse_reading オプションを追加しました。

      このオプションは、読みがなによる検索をサポートします。

      このオプションは、読みがなを使った検索をするため、表記ゆれの対策として有用です。

  • [plugin] 複数のディレクトリからプラグインを取得できるようになりました。

    GRN_PLUGINS_PATH に複数のディレクトリを指定できます。Windowsの場合は、":"でWindows以外では、";"で区切ります。

    GRN_PLUGINS_PATH は、 GRN_PLUGINS_DIR より優先度が高いです。現状、このオプションはWindowsではサポートされていません。

  • [トークナイザー][TokenNgram] TokenNgramunify_alphabet オプションを追加しました。

    unify_alphabetfalse として使うと、 TokenNgram はASCII文字のトークナイズ方法にバイグラムを使います。

  • [トークナイザー][TokenNgram] TokenNgramunify_symbol オプションを追加しました。

    TokenNgram("unify_symbol", false) は、 TokenBigramSplitSymbol と同じ動作です。

  • [トークナイザー][TokenNgram] TokenNgramunify_digit オプションを追加しました。

    unify_digitfalse として使うと、 TokenNgram は数字のトークナイズ方法にバイグラムを使います。

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

修正#

  • いくつかのケースでの誤ったスコア計算を修正しました。

    • ブール値に数値を加算、乗算または除算するときに発生します。

    • !=== を使ってスカラーとベクトルの列を比較するときに発生します。

8.0.6リリース - 2018-08-29#

改良#

  • [トークナイザー][TokenMecab] chunked_tokenizechunk_size_threshold の両オプションに対応しました。

  • [optimizer] query family expressionの推定に対応しました。column @ querycolumn @~ pattern のようなquery family expressionについて、より効果的な実行計画を立てられます。

  • [optimizer] オプティマイザをプラグインから組み込みの機能に変更し、初期状態で無効としました。環境変数を GRN_EXPR_OPTIMIZE=yes と定義するか、従来通りに expression_rewriters テーブルを使う事で機能を有効化できます。

  • 充分に絞り込み済みの場合において、初期状態でシーケンシャルサーチを行うようにしました。現在の結果が充分に少数である場合、シーケンシャルサーチはインデックス検索よりも高速です。現在の結果がテーブル内の全レコードの1%で1000件未満の場合、インデックス検索可能な場合であってもシーケンシャルサーチが使われます。

    現在、この最適化は、 ==><>=<= を使った検索時に適用されます。

    絞り込みに指定したカラムを持つテーブルのキーが ShortText の場合、この最適化を適用するためには、そのテーブルのノーマライザーを NormalizerAuto にする必要があります。

    この機能は環境変数で GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO=0.0 と設定する事で無効化できます。

  • [load] エラーメッセージにテーブル名を含めるようにしました。

  • [load] lock_table オプションを追加しました。--lock_table yes が指定された場合、カラムの更新と --each の適用を行っている間、load は対象のテーブルをロックします。このオプションは loaddelete の衝突を防ぎますが、読み込みの性能を低下させるでしょう。

  • [vector_find] サポートされていないモードでクラッシュしないようにしました。

修正#

  • [index] HASH_KEY を伴ったテキストのベクターに対するオフラインでのインデックス構築に関して、誤ったセクションIDを持つインデックスが構築されてしまうバグを修正しました。

  • --match_columns 'index[0] || index[9]' が誤ったセクションを使用してしまう問題を修正しました。

  • [highlighter] 語彙表がハッシュテーブルで、且つキーワードがN-gramのNよりも少ない文字数の場合に、誤ったハイライトが行われていた問題を修正しました。

  • [mruby] 本当のエラーが隠されていた問題を修正しました。mrubyは引数無しで投げられたエラーの伝搬に対応していません。mruby/mruby#290

  • [トークナイザー][TokenNgram loose]: クエリが曖昧な種類のみであった場合に検索結果が見つからない問題を修正しました。語彙表を伴っての highlight_html() も同様に壊れていました。

  • テキストから数値への変換において、後続するゴミ部分が無視されていた問題を修正しました。 "0garbage" は変換エラーになります。

  • reference_column >= 'key_value' に当てはまる場合の最適化の問題を修正しました。

8.0.5リリース - 2018-07-29#

改良#

  • [スクリプト構文] 類似文書検索の補足説明とその日本語訳を追加しました。 [GitHub groonga/GitHub#858] [堀本さんがパッチ提供]

  • [time_classify_day_of_week] 新しい関数 time_classify_day_of_week() を追加しました。

  • -fstack-protector で警告を抑制するようにしました。(OBATA Akioさんが提案)

  • 新しいAPI time_format_iso8601() を追加しました。

  • grn_raw_string 構造体を公開。

  • 新しいAPI: grn_obj_clear_option_values() を追加しました。永続的なデータベースのremoveと一時的なデータベースのcloseの際にオプションの値を消去できます。

  • [log] [ii][update][one] のエラーメッセージにインデックスカラム名を出力するようにしました。

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

  • [Ubuntu] Ubuntu 17.10 (Artful Aardvark)のサポートをやめました。2018年7月19日でサポートが切れた(EOLになった)ためです。

  • [Debian GNU/Linux] jessieのサポートをやめました。Debianのセキュリティ&リリースチームはもはやjessieの更新を提供しません。

修正#

  • POSTでの /d/load へのデータ送信が中断された後に誤った結果が返されていたのを修正しました。

  • KyTeaに関する間違った関数呼び出しを修正しました。

  • [grndb] --force-truncate オプションのラベルを追加しました。

  • groonga-normalizer-mysql のようにプラグインとして提供されているノーマライザーでオプションを使った場合に、データベースを終了するときにクラッシュする問題を修正しました。

  • ノーマライザーとトークナイザーのオプションが無視される場合があった問題を修正しました。この問題は同じオブジェクトIDが再利用された場合に発生していました。

8.0.4リリース - 2018-06-29#

改良#

  • [log] [ii][update][one] のエラーメッセージにサブエラーを追加しました。

  • 新しいAPI grn_highlighter_clear_keywords() を追加しました。

  • 新しいpredicate grn_obj_is_number_family_bulk() を追加しました。

  • 新しいAPI grn_plugin_proc_get_value_mode() を追加しました。

  • [vector_find] 新しい関数 vector_find() を追加しました。

  • msgpackでのmemcpyの警告を抑制しました。

  • mrubyを1.0.0から1.4.1に更新しました。

  • [doc][grn_obj] grn_obj_is_index_column() のAPIリファレンスを追加しました。

  • [windows] printfフォーマットの警告を抑制しました。

  • [windows] msgpackによる警告を抑制しました。

  • [grn_obj][Plugin] エンコーディングコンバーターを追加しました。ルール:

    • grn_ctx::errbuf: grn_encoding

    • grn_logger_put: grn_encoding

    • mruby: UTF-8

    • path: locale

  • [mrb] LocaleOutput を追加しました。

  • [windows] イメージのパスのgrn_encodingへの変換をサポートしました。

  • [トークナイザー][TokenMecab] エラーメッセージのエンコーディングを変換するようにしました。

  • [window_sum] 対象カラムとしての動的カラムをサポートしました。

  • [doc][grn_obj] grn_obj_is_vector_column() のAPIリファレンスを追加しました。

  • [column_create] より多くのバリデーションを追加しました。

    • 1: ベクターカラムの全文検索インデックスは WITH_SECTION フラグが必要です。(ただし、 WITH_POSITION あり、 WITH_SECTION なしのTokenDelmitは許容されます。これはタグ検索に便利なパターンです。)

    • 2: ベクターカラムの全文検索インデックスはマルチカラムインデックスであってはいけません。詳細: groonga/groonga

  • [grndb] 実装が不十分だったため、ログのチェックを一時的に無効にしました

修正#

  • [sub_filter] 十分にフィルターされたケースで、スコアが多すぎる問題を修正

  • KyTeaがインストールされているとビルドに失敗する問題を修正しました。

  • [grndb] 出力チャネルを修正しました。

  • [query-log][show-condition] クラッシュするバグを修正しました(まだ残っている可能性があります)。

  • [highlighter][lexicon] ハイライトされないバグを修正しました。キーワードの長さがN未満(N-gramのN。多くの場合はBigramなので2未満)の場合、キーワードがハイライトされていませんでした。

  • [windows] base path検出時の問題を修正しました。システムロケールのDLLパスが、CP932での「U+8868 CJK UNIFIED IDEOGRAPH-8868」のように0x5c (ASCIIでの \ )を含む場合に問題がありました。

  • [トークナイザー][TokenNgram] 最初の文字の長さの誤りを修正しました。この問題は、「U+3231 PARENTHESIZED IDEOGRAPH STOCK」のような「PARENTHESIZED IDEOGRAPH」文字で起きていました。

8.0.3リリース - 2018-05-29#

改良#

  • [highlight_html] NormalizerNFKC100 または TokenNgram を使って検索した結果のハイライトをサポートしました。

  • [トークナイザー] TokenNgram に新しいオプション report_source_location option を追加しました。このオプションは、highlight_html で語彙表を使ったハイライトをする時に使用します。

  • [ノーマライザー] NormalizerNFKC100 に新しいオプション unify_middle_dot option を追加しました。このオプションは、中点を正規化します。 の有無や 位置にかかわらず検索できます。

  • [ノーマライザー] NormalizerNFKC100 に新しいオプション unify_katakana_v_sounds option を追加しました。このオプションは、ヴァヴィヴヴェヴォバビブベボ へ正規化します。例えば バイオリンヴァイオリン で検索できます。

  • [ノーマライザー] NormalizerNFKC100 に新しいオプション unify_katakana_bu_sound option を追加しました。このオプションは、ヴァヴィヴゥヴェヴォ に正規化します。例えば、セーブルセーヴルセーヴェル で検索できます。

  • [sub_filter] 十分にフィルターされたケースでの sub_filter の動作を最適化しました。この最適化は、 sub_filter 実行前に十分にレコードが絞り込まれているケースで有効になります。

  • [groonga-httpd] 全てのワーカのコンテキストアドレスをユニークにしました。コンテキストアドレスは、以下のクエリーログの #{ID} です。

    #{TIME_STAMP}|#{MESSAGE}
    #{TIME_STAMP}|#{ID}|>#{QUERY}
    #{TIME_STAMP}|#{ID}|:#{ELAPSED_TIME} #{PROGRESS}
    #{TIME_STAMP}|#{ID}|<#{ELAPSED_TIME} #{RETURN_CODE}
  • [delete] 新しいオプション limit を追加しました。以下の例のように、削除するレコードの件数を制限できます。delete --table Users --filter '_key @^ "b"' --limit 4

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

修正#

  • [logical_select] 動的カラムをフィルターした時にエラーが発生するとメモリリークする不具合を修正しました。

  • [logical_count] 動的カラムの初期化に失敗した際にメモリリークする不具合を修正しました。

  • [logical_range_filter] 動的カラムの評価に失敗した際にメモリリークする不具合を修正しました。

  • [トークナイザー] loose_symbol のように緩いトークナイズをした時に source_offset が誤った値になる不具合を修正しました。

  • [ノーマライザー] U+FF21 FULLWIDTH LATIN CAPITAL LETTER A のような全角ラテン大文字が、U+0061 LATIN SMALL LETTER A のようなラテン小文字に正規化されない不具合を修正しました。すでに、 NormalizerNFKC100 を使用している場合は、インデックスを再生成する必要があります。

8.0.2リリース - 2018-04-29#

改良#

  • [grndb][--force-truncate] grndb recover --force-truncate オプションを指定することで、テーブルにロックが残ったままの状態でも truncate できるようにしました。

  • [logical_range_filter] sort_keys オプションに対応しました。

  • 新しい関数 time_format() を追加しました。Time 型のカラムの値を時刻表記で出力できます。書式は strftime 用の形式を指定できます。

  • [トークナイザー] 新しいトークナイザー TokenNgram を追加しました。このトークナイザーは、オプションを通じて挙動を動的に変えることができます。対応しているオプションは以下の通りです。

    • n : Ngram の「N」を指定します。例えば trigram の場合は「3」です。

    • loose_symbol : 記号を含む語句について、記号の有無の違いを無視して検索できるようにトークナイズします。例えば「090-1111-2222」という語句は、「09011112222」「090」「1111」「2222」「090-1111-2222」のいずれで検索した場合にも検索結果としてヒットするようになります。

    • loose_blank : 空白を含む語句について、空白の有無の違いを無視して検索できるようにトークナイズします。例えば「090 1111 2222」という語句は、「09011112222」「090」「1111」「2222」「090 1111 2222」のいずれで検索した場合にも検索結果としてヒットするようになります。

    • remove_blank : 空白を含む語句について、空白無しの語句で検索できるようにトークナイズします。例えば「090 1111 2222」という語句は、「09011112222」「090」「1111」「2222」のいずれで検索した場合にも検索結果としてヒットするようになります。空白を含む語句「090 1111 2222」での検索にはヒットしない点にご注意下さい。

  • [ノーマライザー] Unicode 10.0 の NFKC(Normalization Form Compatibility Composition)に基づくノーマライザーである "NormalizerNFKC100" を追加しました。

  • [ノーマライザー] ノーマライザーの "NormalizerNFKC51" と "NormalizerNFKC100" でのオプション指定に対応しました。ノーマライザーの挙動を動的に変えることができます。対応しているオプションは以下の通りです。

    • unify_kana : 同じ音となる全角ひらがな、全角カタカナ、半角カタカナの文字を同一視します。

    • unify_kana_case : 全角ひらがな、全角カタカナ、半角カタカナで拗音、促音などを表す小さな文字(例:「ぁ」「ゃ」「っ」)を大きな文字と同一視します。

    • unify_kana_voiced_sound_mark : 全角ひらがな、全角カタカナ、半角カタカナで濁点や半濁点の有無を同一視します。

    • unify_hyphen : ハイフンに類する文字すべてをハイフンと同一視します。

    • unify_prolonged_sound_mark : 長音記号に類する文字すべてを長音記号と同一視します。

    • unify_hyphen_and_prolonged_sound_mark : ハイフンに類する文字と長音記号に類する文字のすべてをハイフンと同一視します。

  • [dump] トークナイザーとノーマライザーのオプションの出力に対応しました。トークナイザーまたはノーマライザーのオプションを含んだ状態でGroonga 8.0.2およびそれ以降で出力した dump は、Grooga 8.0.1以前のバージョンでは読み込めず、未対応の情報によりエラーとなります。

  • [dump] トークナイザーとノーマライザーのオプションの出力に対応しました。トークナイザーまたはノーマライザーのオプションを含んだ状態でGroonga 8.0.2およびそれ以降で出力した schema は、Grooga 8.0.1以前のバージョンでは読み込めず、未対応の情報によりエラーとなります。

  • Ubuntu 18.04 (Bionic Beaver)をサポートしました。

修正#

  • スペースのみの検索クエリが意図しないレコードにマッチする不具合を修正しました。[groonga-dev,04609][satouyuzhさんの報告]

  • 誤ったスコアラーが使われる場合があった不具合を修正しました。この問題は以下のように複数のスコアラーが使われた時に発生していました: --match_columns 'title || scorer_tf_at_most(content, 2.0)'

  • 「thread_limit」の変更に時間がかかりすぎる問題を修正しました。

感謝#

  • satouyuzhさん

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さん