お知らせ - 8系 — Groonga v16.0.5ドキュメント

本文へスキップ
`Ctrl`+`K`

# お知らせ - 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`

      - このフラグは、 `none` と `default` 以外の全てのフラグを指定します。

    - `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] トークンフィルターのオプションの出力をサポートしました。

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

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

  - `TokenFilterStem` や `TokenStopWord` 等のようなオプションを持つトークナイザーを持つテーブルでも `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] デフォルトトークナイザーのオプションをサポートしました。

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

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

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

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

- [トークナイザー][TokenMecab] `TokenMecab` に `target_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のメタデータの出力をサポートしました。

  - `TokenMecab` に `include_class` オプションを追加しました。

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

  - `TokenMecab` に `include_reading` オプションを追加しました。

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

  - `TokenMecab` に `include_form` オプションを追加しました。

    このオプションは、Mecabのメタデータの `inflected_type` と `inflected_form` 、 `base_form` を出力します。

  - `TokenMecab` に `use_reading` オプションを追加しました。

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

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

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

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

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

- [トークナイザー][TokenNgram] `TokenNgram` に `unify_alphabet` オプションを追加しました。

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

- [トークナイザー][TokenNgram] `TokenNgram` に `unify_symbol` オプションを追加しました。

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

- [トークナイザー][TokenNgram] `TokenNgram` に `unify_digit` オプションを追加しました。

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

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

### 修正

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

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

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

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

### 改良

- [トークナイザー][TokenMecab] `chunked_tokenize` と `chunk_size_threshold` の両オプションに対応しました。

- [optimizer] query family expressionの推定に対応しました。`column @ query` や `column @~ 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` は対象のテーブルをロックします。このオプションは `load` と `delete` の衝突を防ぎますが、読み込みの性能を低下させるでしょう。

- [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以前のバージョンでは読み込めず、未対応の情報によりエラーとなります。

- [schema] トークナイザーとノーマライザーのオプションの出力に対応しました。トークナイザーまたはノーマライザーのオプションを含んだ状態で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_adjuster` と `drilldowns[LABEL].adjuster` を追加しました。drilldown結果に対して、スコア調整できるようになります。

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

  `GRN_II_REDUCE_EXPIRE_THRESHOLD=0 == GRN_II_REDUCE_EXPIRE_ENABLE=no` 。 `GRN_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さん