# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English

# お知らせ

## 5.0.8リリース - 2015-09-29

### 改良

- [Windows] MySQLにバンドルしてビルドできるようになりました。（一時できない時期がありました。）

- [スクリプト構文] マッチ演算子 や 等価演算子 のような述語演算（真偽値を返す演算）が `Int32` ではなく `Bool` の値を返すようになりました。

- [API] `GRN_PTR` バルク・ `GRN_PVECTOR` バルクが参照する `grn_obj` の所有権を持てるようになりました。 `GRN_OBJ_OWN` フラグを `GRN_PTR` バルク・ `GRN_PVECTOR` バルクに指定すると、自身が解放されるときに参照している `grn_obj` を `grn_obj_close()` します。

- [非互換][正規表現] マッチ前にマッチ対象のテキストを正規化するようにしました。これは一貫性と性能のためです。

  前方一致検索演算子 のように他の演算は対象のテキストを正規化しています。

  `\Ahello` のようにシンプルな正規表現はインデックスを使って評価できます。インデックスを使うと速いです。

  もし、マッチ対象のテキストが正規化されていないと、 `\A[Hh]ello` や `\A(?i)hello` といった複雑な正規表現を書かないといけません。複雑な正規表現はインデックスを使って評価できません。マッチ対象のテキストが正規化されていると、シンプルな正規表現を使うことができます。シンプルな正規表現はインデックスを使って評価できるかもしれません。インデックスを使えると速いです。

- [ドキュメント] ドキュメントを改善しました。 [GitHub#396][GitHub#397][GitHub#399][GitHub#403] [GitHub#405][GitHub#409] [佐藤博之さんが報告][佐藤博之さんがパッチ提供]

- [highlight_html] 性能を改善しました。 [groonga-dev,03427] [佐藤博之さんが報告]

- [snippet_html] 性能を改善しました。

- [CMake] 2回同じ `pkg-config` を実行しないようにしました。 [Sergei Golubchikさんがパッチ提供]

- 時刻に対するチェックのうち、「年」に対する不要なチェックを削除しました。この変更前は紀元前は常に不正な時刻でした。この変更後は、システム（ `mktime()` ）が紀元前をサポートしていれば、紀元前の時刻も妥当な時刻になります。

- [`grn_ctx_is_opened()`] 指定したIDのオブジェクトが開かれているかどうかをチェックするAPIを追加しました。

- [`grn_obj_remove()`] 最大メモリー使用量を減らしました。 `grn_thread_get_limit()` が `1` を返す場合、一時的に開いたオブジェクトを処理が終わったら閉じるようになります。

- [ドキュメント][table_remove] 説明を増やしました。

- [groonga executable file] スタンドアローンモードのときは dump の結果の最後に改行を追加するようにしました。

- [Process log] `grn_init` のログにGroongaのバージョンを入れるようにしました。

- Gitterにチャットルーム をオープンしました。

- [status] 一貫性のために、 `starttime` の別名として `start_time` を追加しました。他のキーは `snake_case` スタイルの名前になっていたのです。 `starttime` は非推奨になりました。代わりに `start_time` を使ってください。

- バンドルしている鬼雲を更新しました。

- [ドキュメント][scorer_tf_at_most] ドキュメントを追加しました。

- 一時テーブルに対するカラムをサポートしました。今のところC APIからしか使うことはできません。次のリリースでは select はこの機能を活用する予定です。

- [`grn_vector_pop_element()`] 公開しました。

- [groonga executable file] ロック獲得に成功したかどうかをチェックするようにしました。

- [groonga-suggest-create-dataset] `KEY_NORMALIZE` ではなく `--normalizer` を使うようにしました。なぜなら、 `KEY_NORMALIZE` は非推奨になっているからです。

- [`grn_obj_cast()`] 公開しました。

- [実験的][`grn_ii_cursor`] 公開ました。

- [実験的][`grn_ii_cursor_open()`] 公開しました。

- [実験的][`grn_ii_cursor_next()`] 公開しました。

- [実験的][`grn_ii_cursor_close()`] 公開しました。

- [マッチ演算子] インデックスの検出方法を改善しました。トークナイザー付き語彙表に作られているインデックスを優先します。

- [groonga-httpd] バンドルしているnginxを1.9.5に更新しました。1.9.5はHTTP/2をサポートしています。HTTP/2モジュールは有効になっています。

### 修正

- [スクリプト構文] 右辺が `true` のとき `&!` が動いていない問題を修正しました。

- libtool 2.4.6を使うと性能劣化する問題を修正しました。 [GitHub#406][GitHub#407] [佐藤博之さんがパッチ提供]

- [等価演算子] セクションが無視される問題を修正しました。

### 感謝

- 佐藤博之さん

- Sergei Golubchikさん

## 5.0.7リリース - 2015-08-31

このリリースは 静的なインデックス構築方法 のバグフィックスが含まれています。

もし、マルチカラムインデックス（ `WITH_SECTION` フラグ付きのインデックスカラム）と 静的なインデックス構築方法 を使っている場合は、Groongaのアップグレードを推奨します。

このリリースはWindowsユーザー向けの重要な実験的な機能が含まれています。詳細は以下の改良点リストの中の「スパースファイルサポート」を参照してください。

### 改良

- [実験的][Windows] スパースファイルをサポートしました。この機能は実験的な機能です。デフォルトでは無効です。 `GRN_IO_USE_SPARSE=yes` 環境変数を指定すると有効にできます。

  Windows上でデータベースのファイルサイズを小さくできます。この機能を試して結果を報告してください。Groonga開発者は次の点に興味があります。

  - ディスク使用量

  - パフォーマンス（速くなったか？遅くなったか？変化はないか？）

  - メモリー使用量（特に仮想メモリー使用量）

- [実験的][logical_shard_list] 指定された論理テーブルのシャードのリストを返すコマンドを追加しました。

- [実験的][正規表現演算子] インデックスなしでもベクターカラムに対して正規表現を使えるようになりました。

- [logical_range_filter] `--cache no` オプションをサポートしました。これは、 select の cache オプションと同じ機能です。

- [groonga-httpd] thread_limit の最大スレッド数を返す機能に対応しました。最大スレッド数を設定することはできません。

- [`grn_db_unmap()`] 開いているすべてのテーブルとカラムをアンマップするAPIを追加しました。これはスレッドセーフではない操作です。 `grn_db_unmap()` 実行中はデータベースを触ることはできません。

- [database_unmap] データベース内の開いているすべてのテーブルとカラムをアンマップするコマンドを追加しました。

- [object_exist] データベース内に指定された名前のオブジェクトが存在するかどうかを返すコマンドを追加しました。

- [column_copy] コピー元カラムからコピー先カラムへすべての値をコピーするコマンドを追加しました。

  このコマンドを使うと、カラムの値の型を変更したり、カラムの種類を変更したり、テーブルの種類を変更したりできます。

- 非標準の `__uint32_t` 型を使うことを止めました。 [GitHub#375][Natanael Copaさんが報告]

- [実験的][Windows] Windowsイベントログをサポートしました。

- [mruby] mrubyの初期化エラー処理をサポートしました。

- [実験的][thread_limit] `thread_count` からリネームしました。

- `info` レベルと `debug` レベルで使用したインデックスをログに出力するようになりました。これはRDBMSの `EXPLAIN` のように使うことができます。スロークエリーを改良するときに便利です。

- [ドキュメント] 非推奨の `KEY_NORMALIZE` フラグを置き換えました。 [GitHub#378][GitHub#380][GitHub#382] [佐藤さんがパッチ提供]

- [ドキュメント] 必要のないSphinxの設定を削除しました。 [GitHub#379] [長内さんがパッチ提供]

- [実験的][非互換][正規表現演算子] `.` のマッチの挙動が変わりました。 `.` は改行にもマッチします。これは後方非互換な変更です。

- [ドキュメント][リポジトリーのGroongaをビルドする方法] Groongaの開発者としてGroongaをビルドするためのドキュメントを追加しました。 [GitHub#353] [吉岡さんが提案]

### 修正

- [mruby] 時間の値がオーバーフローするバグを修正しました。

- [groonga executable file] PIDファイルを作成できないときにクラッシュする問題を修正しました。 [GitHub#368] [佐藤さんが報告]

- 静的なインデックス構築方法 が壊れたインデックスを構築する可能性がある問題を修正しました。この問題はマルチカラムインデックスのインデックスを構築するときに発生する可能性があります。言いかえると、 `WITH_SECTION` フラグ付きのインデックスカラムは壊れる可能性があるということです。

  `WITH_SECTION` フラグ付きのインデックスカラムに 動的なインデックス構築方法 を使っている場合はこのバグの影響はありません。

  このバグで壊れたインデックスは既存のマルチカラムインデックスを再作成すると復旧できます。

- [query] scorer で query を使うとクラッシュするバグを修正しました。

- [filter] 符号なし整数に ビット否定演算子 を使うと、 `-数値リテラル` との比較が正常に動かないバグを修正しました。

  たとえば、次の式は正常に動きません。:

      ~UINT32_COLUMN == -6

- 正規表現演算子 がマルチスレッド環境で動かない問題を修正しました。

- メモリーリークをいくつか修正しました。

- ビルドエラーを修正しました。 [GitHub#381] [畑ケさんがパッチ提供]

### 感謝

- 佐藤博之さん

- Natanael Copaさん

- 長内歩さん

- 畑ケさん

- 吉岡さん

## 5.0.6リリース - 2015-07-29

### 改良

- [Ubuntu] Ubuntu 14.10（Utopic Unicorn）のサポートをやめました。2015年7月23日でサポートが切れた（EOLになった）ためです。

- 参照ベクターカラムの静的なインデックス構築をサポートしました。例えば、 `column_create` でインデックスカラムを作成する前にデータを `load` する場合です:

      table_create Entries TABLE_NO_KEY
      column_create Entries numbers COLUMN_VECTOR Int32

      load --table Entries
      [
      ["numbers"],
      [[18, 19, 20]],
      [[100, 200]]
      ]

      table_create Numbers TABLE_PAT_KEY Int32
      column_create Numbers entries_numbers COLUMN_INDEX Entries numbers

      select Numbers --output_columns _key

- インデックスなしの `'vector_text_column @ "element"'` をサポートしました。例えば、以下のコマンド内の `select` コマンドです:

      table_create Memos TABLE_NO_KEY
      column_create Memos tags COLUMN_VECTOR Text

      load --table Memos
      [
      {"tags": ["Groonga", "Rroonga", "Mroonga"]}
      ]

      select Memos --filter 'tags @ "Rroonga"'

- インデックスなしの `'fixed_size_type_vector_column @ n'` をサポートしました。例えば、以下のコマンド内の `select` コマンドです:

      table_create Memos TABLE_NO_KEY
      column_create Memos numbers COLUMN_VECTOR Int32

      load --table Memos
      [
      {"numbers": [1, 2, 3]}
      ]

      select Memos --filter 'numbers @ 2'

- [CentOS][サーバーパッケージ][groonga-httpd] 終了ステータスを表示するようにしました。[GitHub#357] [jacob16bitさんがパッチ提供]

- [Windows][groonga executable file] `--pid-path` をサポートしました。

- [Windows] 他のプロセスが開いているファイルの削除を可能にしました。

- セレクターのみで使えるprocを作れるようになりました。ただし、そのようなprocは関数として使えません（シーケンシャルサーチに使えないため）。

- 複雑な引数の関数呼び出しをサポートしました。複雑な引数とは、例えば `Table["key"].column` です。例:

      function(_key, Table["key"].column)

- [doc][チュートリアル] データベース作成時に既にファイルが存在するパスを指定したときのエラーについて追記しました。 [GitHub#354] [Hirotaka Takayamaさんが提案]

- [doc][チュートリアル] JSONを整形するためのツールについて追記しました。 [GitHub#355] [tiwawanさんが提案]

- [実験的] スレッド数を取得・設定するAPIを追加しました。これは実験的なAPIです。

- [実験的][`thread_count`] スレッド数を取得・設定するコマンドを追加しました。これは実験的なコマンドです。

- [実験的][groonga executable file] `thread_count` コマンドによるスレッドの最大数の変更をサポートしました。これは実験的な機能です。

- [実験的][Windows] Windowsのイベントログのサポートを追加しました。これは実験的な機能です。

- [実験的][groonga executable file] Windowsのイベントログに関連するオプション `--use-windows-event-log` を追加しました。このオプションを指定すると、ログをWindowsのイベントとして報告します。これは実験的な機能です。

- [Windows] ログメッセージにGroongaのデフォルトのエンコーディングを使うようにしました。

- ログレベルが `INFO` のときに、使われているインデックスをログに出力するようになりました。ただし、デフォルトのログレベルは `NOTICE` なので、デフォルトでは出力されません。

- [API] `grn_log_level_to_string()` と `grn_log_level_parse()` を追加しました。

- [groonga executable file] `--log-level` の値にログレベルの名称（ `info` や `debug` など）を指定できるようになりました。

- [log_level][log_put] `--level` の引数にログレベルの名称を指定できるようになりました。

- [plugin] `grn_command_input_get_arguments()` を追加しました。

- shardingプラグインを更新しました。

  - [logical_select] 出力フォーマットを select との互換フォーマットになるように修正しました。

  - [logical_select] 以下のパラメーターをサポートしました。

    - `--output_columns`
    - `--offset`
    - `--limit`
    - `--drilldown`
    - `--drilldown_sortby`
    - `--drilldown_offset`
    - `--drilldown_limit`

  - [logical_select] 出力カラム（output_columns）に select のデフォルト（ `"_id, _key, *"` ）と同じものを使うようにしました。

  - [logical_select] ラベル付きドリルダウンで drilldown[${LABEL}].calc_types と drilldown[${LABEL}].calc_target をサポートしました。

  - [logical_select] キャッシュをサポートしました。

  - [logical_count] 範囲インデックス（range index）が使われたかどうかのロギングをサポートしました。

  - [logical_count] 対象テーブル名をデバッグログに表示するようにしました。

  - [logical_count] キャッシュをサポートしました。

  - [logical_range_filter] `'fixed_size_type_vector_column @ element'` をサポートしました。

  - [logical_range_filter] `use_range_index` パラメーターを追加しました。これはテスト用のパラメーターなので、本番で使うべきではありません。

  - [logical_range_filter] どちらのモード（range-indexかselect mode）が使われているかログに出力するようにしました。

  - [logical_range_filter] キャッシュをサポートしました。

  - [logical_range_filter] ネストした参照ベクターカラムのアクセサーをサポートしました。

  - [logical_range_filter] logical_parameters で設定されたrange_indexの値を使うようになりました。

  - [logical_parameters] 追加しました。

- mrubyのAPIを追加しました。

  - [mrb] `Accessor#name` を追加。

  - [mrb] `Column#[]` を追加。

  - [mrb] `Column#scalar?` と `Column#vector?` 、 `Column#index?` を追加。

  - [mrb] `Context#command_version` と `Context#command_version=` （アクセサー） を追加。

  - [mrb] `Context#with_command_version` を追加。

  - [mrb] `Database#each_name` を追加。

  - [mrb] `Groonga::Cache.current` を追加。

  - [mrb] `Record` を追加。

  - [mrb] `Table#each` を追加。

  - [mrb] `TableCursor#key` を追加。

  - [mrb] `grn_command_input_get_arguments()` を `CommandInput#arguments` にバインド。

  - [mrb] `grn_table_group()` を `Table#group` にバインド。

  - [mrb] `grn_table_group_flags()` を `TableGroupFlags` にバインド。

  - [mrb] `GRN_COMMAND_VERSION_DEFAULT` をバインド。

  - [mrb] `grn_cache` をバインド。

  - [mrb][estimate_size] `(... || ...) && (... || ...)` のようなexpressionのケースをサポート。

  - [mrb] クエリーログをサポートしました。

### 修正

- `grn_expr_exec()` でエラーが発生したときのメモリーリークを修正しました。例えば、サポートしていないオペレーター（例： `GRN_OP_TERM_EXTRACT`）が使われた場合です（ `not implemented operator assigned` が発生するケース）。

- [bindings/php] メモリーアロケーションに失敗したときのチェックが抜けていたのを追加しました。[Bill Parkerさんが報告]

- [CentOS][サーバーパッケージ][ログローテート] スクリプト内のシンタックスエラーを修正しました。

- [CentOS][サーバーパッケージ][ログローテート] デーモンの起動チェックを修正しました。

- [CentOS][サーバーパッケージ][ログローテート] ログファイルにオーナー・グループを設定するのをやめました。理由は、一貫性がないためです。groonga-httpdはログファイルをrootオーナー・rootグループで作成しますが、ログローテート時はgroongaオーナー・groongaグループで作成されていました。 [GitHub#358] [jacob16bitさんが報告]

- [groonga executable file] 報告されるスレッドの最大数を修正しました。

- [groonga-httpd] ログメッセージ内の不要なスペースを削除しました:

      |n|  grn_fin (0) ->
      |n| grn_fin (0)
          ^

- 正規表現クエリーでアンカー（例: `--filter 'comment @~ "\\\\Abc"'` 内の `\\\\A` ）が使われたときにサイズ推定がうまく動作しない不具合を修正しました。これは logical_range_filter で使われている機能です。

- [リクエストID] `request_id` のバイトサイズが24以上だった場合にメモリーリークが発生していた問題を修正しました。

- [lock_clear] 構文セクションのコマンド名の誤字を修正しました。[GitHub#363] [Christian Kakesaさんが報告]

- [sharding] 月の範囲に最小値が含まれているかどうかの検出方法が誤っていたのを修正しました。

### 感謝

- Bill Parkerさん

- jacob16bitさん

- Hirotaka Takayamaさん

- tiwawanさん

- Christian Kakesaさん

## 5.0.5リリース - 2015-06-29

### 改良

- データベースを開くときにファイルが存在しなかった場合などに、正しいエラー情報を表示するようにしました。

- ライブラリーとして使うときに、デフォルトのロガーのパスを設定しないようにしました。

  - これは後方互換性のない変更ですが、ほとんどのユーザーには影響がありません。

  - サーバーとして使うとき（groongaコマンドやMroonga、PGroongaなど）は、開発者がそれらのソフトウェアでログを設定するため、ユーザーはデフォルトでログを取得できます。

  - ライブラリーとして使うとき（Rroongaやgroonga-gobjectなど）は、以前のバージョンでもデフォルトでログを取得できませんでした。デフォルトのログのパスは/var/log/groonga/groonga.logなどのシステムのパスでしたが、通常ユーザーはそのパスに対する書き込み権限がないためです。

- [windows] メモリ不足などで `CreateFileMapping()` が失敗した場合、エラー情報を表示するようにしました。

- [tokenize] 例に "force_prefix" を表示するようにしました。これは5.0.4で追加された値です。

- [windows] ディスクに問題があり（ディスクフルなど） `FlushViewOfFile()` が失敗した場合、エラー情報を表示するようにしました。

- [API] `grn_obj_flush()` を追加しました。

- [API] `grn_obj_flush_recursive()` を追加しました。

- [io_flush] 追加しました。メモリーにマップされたデータをディスクに書き込む（フラッシュする）コマンドです。通常、フラッシュはOSが自動で行いますが、このコマンドを使えば明示的にフラッシュすることができます。

- [mruby] `grn_obj_remove()` をObject#removeにバインドしました。

- [mruby] `grn_table_delete()` と `grn_table_delete_by_id()` をTable#deleteにバインドしました。

- [logical_table_remove] 追加しました。

- [logical_select] 追加しました。現在は `--filter` のみサポートされています。

- [cmake] MeCabトークナイザーの組み込みをサポートしました。

- [logical_count] 月次と日次が混在するケースをサポートしました。同じ月内では、日次に切り替わる前のレコードが月次として扱われます。例:

      XXX_201506   <- includes only 2015-06-01 and 2015-06-02 records
      XXX_20150603 <- includes only 2015-06-03 records
      XXX_20150604 <- includes only 2015-06-04 records

### 修正

- netinet/in.hインクルード時の不正なマクロを修正しました。 [GitHub#348] [おばたさんが報告]

- [rpm][groonga-httpd] 再起動が失敗する不具合を修正しました。 [GitHub#351] [jacob16bitさんがパッチ提供]

### 感謝

- おばたさん

- jacob16bitさん

## 5.0.4リリース - 2015-05-29

### 改良

- [mruby] `inspect` を意味のあるわかりやすいエラーメッセージを表示するために使うようにしました。

- [mruby] バルクオブジェクトを調査するための `Groonga::Bulk#inspect` をサポートしました。

- [mruby] バルクオブジェクトからレコードの値を取得するための `Bulk#value` をサポートしました。

- [mruby] logical_range_filter で参照型のカラムの値が特定のレコードのIDにマッチする場合 (`reference_column == record_id`) を効率良く検索するために必要なマッチするレコード数を見積もれるようになりました。

- [sub_filter] インデックスカラムを `scope` 引数に指定できるようになりました。

- [スクリプト構文] 数値に関する記述をよりわかりやすくしました。 [GitHub groonga/groonga.org#16] [佐藤さんが提案]

- [select] Select対象でない他のテーブルのレコードをフィルタに指定できるようになりました。 `--filter 'OTHER_TABLE[KEY].COLUMN'` といったようにフィルタで指定できます。

- [select] テーブルのキーを指定するためにオペレータを使えるようになりました。たとえば、 `--filter 'OTHER_TABLE["SOME STRING" + "ANOTHER STRING"]` というように連結した文字列という式でキーを指定することができます。

- [example] Ruby 2.0以降のAPIを辞書の変換スクリプトで使うようにしました。

- テーブルのキーの型が正しくないときにエラーメッセージを表示するようにしました。

- [doc] メーリングリストの案内ページへのリンクをsourceforge.jpからosdn.meやosdn.jpに修正しました。

- [tokenize] 各トークンの情報に `force_prefix` の値を追加しました。[村上さんがパッチ提供]

- TokenTrigram を使っていても、2文字以下の語句で検索できるようにしました。 [GitHub#341] [村上さんがパッチ提供]

- [deb] groonga-httpdとgroonga-server-gqtpのパッケージにSystemd用serviceファイルを追加しました。

- [select] `--query` の値が空白文字だけなら無視するようにしました。空白文字にはいわゆる全角スペース（Unicodeでいうと `U+3000 IDEOGRAPHIC SPACE` ）も含みます。 [TomyGXさんが提案]

### 修正

- 空のキーが `drilldown[label].keys` に指定されるとクラッシュする不具合を修正しました。

- `grn_parse_query_flags` の返り値を適切にチェックしていないのを修正しました。 [GitHub#336] [Hiroaki Nakamuraさんが報告]

- BSD系でビルドエラーになる不具合を修正しました。 `sed` に `-i` オプションがないためエラーになっていました。

- Solarisでビルドエラーになる不具合を修正しました。`memset()` にて `sizeof(msghdr)` だけ初期化するようにしました。これは Solarisでは `msg_control` と `msg_controllen` と `msg_flags` が存在しないためです。

- [トークナイザー] ドキュメントの誤字を修正しました。[GitHub#338] [佐藤さんが報告]

- [出力] ドキュメントのマークアップを修正しました。 [GitHub groonga/groonga.org#17] [佐藤さんが報告]

- `grn_ii_cursor_set_min()` を呼ぶごとに getenv()しないようにしました。これによりWindows上でのパフォーマンスのリグレッションが解決します。

- OpenBSDでビルドエラーになる不具合を修正しました。 [groonga-dev,03255] [fbnteqrさんが報告]

- [groonga-httpd] 同じメッセージが重複してログに記録される不具合を修正しました。

- 二重にメモリを開放することでクラッシュする不具合を修正しました。

- メモリリークを修正しました。 `--match_columns` と `--query` にインデックスを張っていないテキストカラムを指定し、そのテキストカラムの内容がバルクオブジェクトに収まりきらないと発生します。バルクオブジェクトに収まりきらないのは32byteを越える場合です。そのため、テキストがそれよりも短いものばかりならばこの不具合の影響を受けません。

- [トークナイザー] [TokenRegexp] クエリに空白として扱われる文字が含まれている場合に正しく検索できない不具合を修正しました。典型的な例は改行 ("\n")が含まれている場合です。

### 感謝

- Hiroaki Nakamuraさん

- 佐藤博之さん

- 村上さん

- fbnteqrさん

- TomyGXさん

## 5.0.3リリース - 2015-04-29

### 改良

- [トークナイザー][正規表現] 最後の一文字のトークンをスキップするようにしました。

- [mruby] 正規表現パターンのサイズ推定をサポートしました。

- [mruby] アクセサーのサイズ推定をサポートしました。

- [logical_range_filter] Groonga 5.0.2で導入された `GRN_LOGICAL_RANGE_FILTER_ENABLED` 環境変数を削除しました。範囲インデックス検索を無効にするには `GRN_LOGICAL_RANGE_FILTER_THRESHOLD=0` を使ってください。

- [logical_range_filter] 負の上限値とオフセットをサポートしました。

- [Windows] パッケージで Groonga Admin を使うようにしました。

- [logical_range_filter] 閾値の意味を変更しました。

  - threshold <= 0.0: 常に範囲インデックスを使う

  - threshold >= 1.0: 範囲インデックスを全く使わない

- [dump] プラグインに対応しました。

- [dump] 以下のオプションを追加しました。

  - `--dump_plugins [yes(default)/no]`
  - `--dump_schema [yes(default)/no]`
  - `--dump_records [yes(default)/no]`
  - `--dump_indexes [yes(default)/no]`

- [API] `grn_plugin_get_ruby_suffix()` を追加しました。

- [dump] インデックスカラムは参照カラムを参照するので、インデックスカラムを参照カラムの後に置くように修正しました。

- [dump] 語彙表のレコードをダンプしないようにしました。

- [dump] 再度 `TABLE_NO_KEY` のときに `_id` を表示するようにしました。

- [dump] オフラインインデックス構築するようにしました。

- ハッシュのキーサイズの上限値を4KiB（4096バイト）から64KiB - 1（65535バイト）に増やしました。

- キャッシュのキーサイズの上限値を4KiB（4096バイト）から64KiB - 1（65535バイト）に増やしました。

- ネストしたインデックス検索のパフォーマンスを改善しました。

- 存在しない参照カラムにインデックスを使うようにしました。

- [実験的] vector_size 関数を含むfunctions/vectorプラグインを追加しました。

- [Windows] Visual Studioのバージョンを更新しました。 [GitHub groonga/meetup#4] [Hiroyuki Mizuharaさんが報告]

- [cache_limit] キャッシュの上限値が減ったときに古いキャッシュから無効にするようにしました。 [株式会社ぐるなびさんが提案]

- エラー時にerrnoなどの情報を表示するようにしました。

- [windows] 安全な関数を使うようにしました。

- ログローテーションの閾値を変更するためのAPIを追加しました。

  - `grn_default_logger_set_rotate_threshold_size()`
  - `grn_default_logger_get_rotate_threshold_size()`
  - `grn_default_query_logger_set_rotate_threshold_size()`
  - `grn_default_query_logger_get_rotate_threshold_size()`

- [実験的] ログローテーションをサポートしました。この機能はデフォルトでは無効です。以下のオプションで有効にできます。

  - `--log-rotate-threshold-size`
  - `--query-log-rotate-threshold-size`

- [GQTP] GQTPサーバーについてのドキュメントを追加しました。

- [groonga executable file] groonga実行ファイルのドキュメントを一部追加しました。

- Ubuntu 15.04 (Vivid Vervet)をサポートしました。

- Debian 8.0 (Jessie)をサポートしました。

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

### 修正

- [windows] Microsoft Visual C++でビルドしたGroongaで、大きいデータ（少なくとも1GB以上）のオフラインインデックス構築（静的なインデックス構築方法） に失敗していた不具合を修正しました。 [Hideki ARAIさんが報告]

- [mruby] 正規表現の中の `\\` をインデックス検索可能にしました。

- `GRN_II_CURSOR_SET_MIN_ENABLE=yes` のときにいくつかマッチ済みのレコードを返していなかった不具合を修正しました。

- [sharding] 部分範囲がすべての範囲として扱われる不具合を修正しました。

- [logical_range_filter] `:order => "descending"` が動作しない不具合を修正しました。

- [logical_count] 範囲インデックスの集計を再度サポートしました。

- 誤動作の原因となる `grn_pat_del()` の不具合を修正し、無効なパトリシアトライノードのテストを追加しました。 [groonga-dev,03177] [yuya sakoさんが報告]

### 感謝

- Hideki ARAIさん

- Hiroyuki Mizuharaさん

- 株式会社ぐるなびさん

- yuya sakoさん

## 5.0.2リリース - 2015-03-31

5.0.1のバグフィックスリリースです。

### 改良

- MessagePack 1.0.1をサポート。 [畑ケさんが報告]

- [logical_range_filter] 範囲検索をデフォルトで無効にした。 環境変数 `GRN_LOGICAL_RANGE_FILTER_ENABLED` に `yes` を設定すれば有効になる。

### 修正

- JSONPが動作していなかった不具合を修正。これはGroonga 4.1.1で入った不具合。

- Groonga 5.0.1がx86環境でクラッシュする不具合を修正。[groonga-dev,03131] [篠田さんが報告]

- libeditが正しく初期化されない不具合を修正。CentOS 7などの環境で問題が解消される。

### 感謝

- 篠田さん

- 畑ケさん

## 5.0.1リリース - 2015-03-29

### 改良

- [logical_range_filter] filterとsortをサポートしました。

- マルチカラムインデックスを使った指定範囲の検索をサポートしました。

- Groongaをライブラリとして使う人向けにAPIの 概要 を追加しました。

- [非互換] 内部で使っている `_score` の型を 32bit整数値から浮動小数点数に変更しました。この変更はGroongaのDB APIを使っているユーザーにとって非互換な変更です。クエリAPIを使っているユーザーには影響ありません。つまり、select を使っているだけなら影響ないということです。新旧のバージョンのGroongaで動作するようにするには次のコードを使います:

      grn_obj *score;
      double score_value;

      if (score->header.domain == GRN_DB_FLOAT) {
        score_value = GRN_FLOAT_VALUE(score);
      } else {
        score_value = (double)GRN_INT32_VALUE_FLOAT_VALUE(score);
      }

- [select] ドリルダウンの引数の誤りをより厳密にチェックするようにしました。

- `grn_ctx_get_all_tables()` を追加しました。 [Masatoshi Teruyaさんが提案]

- スコア関数のカスタマイズをサポートしました。詳細は スコアラー を参照してください。

- [非互換] スコア関数の導入により、DB API層でAPIとABIの互換性がなくなりました。`grn_search_optarg` を使っていたら、次のようなコードで `grn_search_optarg` を `0` で初期化しているかチェックしてください。:

      grn_search_optarg options;
      memset(&options, 0, sizeof(grn_search_optarg));

  上記のようにしていれば、あなたの書いたコードはAPIの互換性があり、ABIは互換性がない状態です。単にそのままリビルドしてください。コードの修正は不要です。

  もしあなたの書いたコードが上記のようにしていないなら、上記のコードを追加してください。

- DB APIに `grn_obj` の型をチェックするための述語関数を追加しました。

  - `grn_obj_is_table()`
  - `grn_obj_is_proc_proc()`
  - `grn_obj_is_function_proc()`
  - `grn_obj_is_selector_proc()`
  - `grn_obj_is_scorer_proc()`

- [実験的] ポスティングリストをスキップできるようにしました。頻出語とほとんど出現しない語が同時に検索されたときにスキップできます。これにより検索の速度を改善できます。この機能を有効にするには `GRN_II_CURSOR_SET_MIN_ENABLE` 環境変数を `1` にします。デフォルトでは無効です。

- [doc] in_values のドキュメントを追加しました。

- logical_count のドキュメントを追加しました。

- [mruby] `#inspect` メソッドを実装しました。デバッグに有用です。

- スコアラー scorer_tf_at_most のドキュメントを追加しました。出現頻度が高くても、指定したスコアの閾値を越えないようにします。

- [mruby] マッチする件数を推定してインデックスを使って検索するかシーケンシャルに検索するかを選択できるようにしました。

- インデックスを使ってサイズを推定するための関数を追加しました。

  - `grn_expr_estimate_size()`
  - `grn_ii_estimate_size_for_query()`
  - `grn_ii_estimate_size_for_lexicon_cursor()`

- NormalizerAuto が利用できるかのチェックを追加しました。[GitHub#283] [末永さんが報告]

- Visual Studio 2010のサポートをやめました。

- [実験的][mecab] チャンクに分割してトークナイズできるようにしました。この機能は MeCabの "too long sentense" エラーの回避策です。有効にするには `GRN_MECAB_CHUNKED_TOKENIZE_ENABLED` 環境変数を `yes` に設定します。この設定により、Groonga は長いテキスト (デフォルトでは 8192 バイトを越えるテキスト)を小さなチャンクと呼ばれるかたまりに分割してMeCabへと渡します。この処理により、上記のエラーが発生しないようになります。さらに、このチャンクの閾値は `GRN_MECAB_CHUNK_SIZE_THRESHOLD` 環境変数でカスタマイズできます。`,`, `.`, `!`, `?`, `U+3001 IDEOGRAPHIC COMMA`, `U+3002 IDEOGRAPHIC FULL STOP`, `U+FF01 FULLWIDTH EXCLAMATION MARK` と `U+FF1F FULLWIDTH QUESTION MARK` がチャンクの区切り文字として扱われます。

- groonga executable file のサーバーモードで `--pid-file` をサポートしました。

- [groonga-httpd] Groongaを緩やかに停止することができるようにしました。コネクションを即座に強制終了しないようになります。

- [実験的] 正規表現をサポートしました。正規表現の使いかたについては 正規表現 を参照してください。

- [実験的] plugin_unregister コマンドを追加しました。

- [http][load] "," をPOSTデータの区切り文字として使うようにしました。これにより、内部のバッファサイズが小さくて済むので、POSTデータに一切改行がない場合にロード時間を短縮できます。

- [doc] トークナイザー のドキュメントを追加しました。

- POSIX.2 との互換性を改善しました。bashの "source" コマンドのかわりに `.` を使うようにしました。[GitHub#317] [栗山さんがパッチ提供]

- [windows] デフォルトのIOバージョンを1に変更しました。これによりWindowsでディスク容量を削減できます。[groonga-dev,03118] [ongaeshiさんがテスト]

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

- TSV出力時のMIMEタイプを `text/plain` から `text/tab-separated-values` に変更しました。

- [TokenFilterStopWord] 静的なインデックス構築方法 をサポートしました。[GitHub#296] [村上さんがパッチ提供]

### 修正

- 非推奨の `--address` 引数をGroongaのデフォルト設定ファイル(groonga.conf)で使わないようにしました。かわりに `--bind-address` を使います。 [Groonga-talk] [Dewanggaさんが報告]

- [truncate] キーが TABLE_NO_KEY なテーブルでtruncateができない問題を修正しました。

- [mecab] 不必要な "empty token" や "ignore empty token" といったログが出力されないようにしました。

- 誤ったインデックスのセクションが使われてしまう不具合を修正しました。これにより誤った検索結果を返していました。次の条件をすべて満すと発生します。

  - 複数のインデックスが張られている

  - 最初に定義したインデックスか最後に定義したインデックスがマルチカラムインデックスを使っている

  - 最初に定義したインデックスと最後に定義したインデックスがマルチカラムインデックスだったとき、そのソースカラムの指定順が異なっている

- シェルのコマンドラインからGroongaのコマンドを groonga executable file に渡すと常に `0` を終了コードとして返す不具合を修正しました。 例えば、 `groonga DB_PATH 存在しないコマンド名` を実行しても終了コードとして `0` を常に返します。

- 2つ以上のプラグインを登録しているときにプラグインのパスが壊れてしまう不具合を修正しました。 [村上さんが報告]

- match_columns に `Lexicon.index.source_column_name` を指定しても動作しない不具合を修正しました。`source_column_name` として指定されたカラムが2つ以上のインデックスをもつ場合に発生します。 [村上さんが報告]

### 感謝

- Masatoshi Teruyaさん

- 末永さん

- Dewanggaさん

- 栗山さん

- ongaeshiさん

- 村上さん

## 5.0.0リリース - 2015-02-09

- バージョン5.0.0になりました!

### 改良

- [doc] スクリプト構文 の セキュリティー に関して追加しました。

- [実験的] シャーディングするためのプラグインを追加しました。有効にするには register sharding を前もって実行します。レコードをselectするには logical_count を使います。

- [cmake] FreeBSD 10.1でのコンパイルエラーを修正しました。[MDEV-7293] [Bernard Spilさんが報告]

- プラグインのディレクトリをカスタマイズできるようにしました。 その場合 GRN_PLUGINS_DIR 環境変数を設定します。

### 修正

- システムに互換性のないバージョンのonigmoもしくはonigurumaのヘッダーがインストールされているとビルドに失敗する問題を修正しました。 [GitHub#276] [武者さんがパッチ提供]

- MSVCのtime関連でビルドに失敗する問題を修正しました。 [GitHub#237]

### 感謝

- 武者さん

- Bernard Spilさん

## 古いリリース

- 4.1.1リリース - 2015-01-29
  - 改良
  - 修正
  - 感謝
- 4.1.0リリース - 2015-01-09
  - 修正
- 4.0.9リリース - 2014-12-29
  - 改良
  - 修正
  - 感謝
- 4.0.8リリース - 2014-11-29
  - 改良
  - 修正
  - 感謝
- 4.0.7リリース - 2014-10-29
  - 改良
  - 修正
  - 感謝
- 4.0.6リリース - 2014-09-29
  - 改良
  - 修正
  - 感謝
- 4.0.5リリース - 2014-08-29
  - 改良
  - 修正
  - 感謝
- 4.0.4リリース - 2014-07-29
  - 改良
  - 修正
  - 感謝
- 4.0.3リリース - 2014-06-29
  - 改良
  - 修正
  - 感謝
- 4.0.2リリース - 2014-05-29
  - 改良
  - 修正
  - 感謝
- 4.0.1リリース - 2014-03-29
  - 改良
  - 修正
  - 感謝
- 4.0.0リリース - 2014-02-09
  - 改良
  - 修正
  - 感謝
- 3.1.2リリース - 2014-01-29
  - 改良
  - 修正
  - 感謝
- 3.1.1リリース - 2013-12-29
  - 改良
  - 修正
  - 感謝
- 3.1.0リリース - 2013-11-29
  - 改良
  - 修正
  - 感謝
- 3.0.9リリース - 2013-10-29
  - 改良
  - 修正
  - 感謝
- 3.0.8リリース - 2013-09-29
  - 改良
  - 修正
  - 感謝
- 3.0.7リリース - 2013-08-29
  - 改良
  - 修正
  - 感謝
- 3.0.6リリース - 2013-07-29
  - 改良
  - 修正
  - 感謝
- 3.0.5リリース - 2013-06-29
  - 改良
  - 修正
  - 感謝
- 3.0.4リリース - 2013-05-29
  - 改良
  - 修正
  - 感謝
- 3.0.3リリース - 2013-04-29
  - 改良
- 3.0.2リリース - 2013-03-29
  - 改良
  - 修正
  - 感謝
- 3.0.1リリース - 2013-02-28
  - 改良
  - 修正
  - 感謝
- 3.0.0リリース - 2013-02-09
  - 修正
  - 感謝
- 2.1.2リリース - 2013-01-29
  - 改良
  - 修正
  - 感謝
- 2.1.1リリース - 2012-12-29
  - 修正
- 2.1.0リリース - 2012-12-29
  - 改良
  - 修正
  - 感謝
- 2.0.9リリース - 2012-11-29
  - 改良
  - 修正
  - 感謝
- 2.0.8リリース - 2012-10-29
  - 改良
  - 修正
  - 感謝
- 2.0.7リリース - 2012-09-29
  - 改良
  - 修正
  - 感謝
- 2.0.6リリース - 2012-08-29
  - 改良
  - 修正
  - 感謝
- 2.0.5リリース - 2012-07-29
  - 改良
  - 修正
  - 感謝
- 2.0.4リリース - 2012-06-29
  - 改良
  - 修正
  - 感謝
- 2.0.3リリース - 2012-05-29
  - 改良
  - 修正
  - 感謝
- 2.0.2リリース - 2012-04-29
  - 改良
  - 修正
  - 感謝
- 2.0.1リリース - 2012-03-29
  - 改良
  - 修正
  - 感謝
- 2.0.0リリース - 2012-02-29
  - 改良
  - 修正
  - 感謝
- 1.3.0リリース - 2012-01-29
  - 改良
  - 感謝
- 1.2.9リリース - 2011-12-29
  - 改良
  - 修正
  - 感謝
- 1.2.8リリース - 2011-11-29
  - 改良
  - 修正
  - 感謝
- 1.2.7リリース - 2011-10-29
  - 改良
  - 修正
  - 感謝
- 1.2.6リリース - 2011-09-29
  - 改良
  - 修正
  - 感謝
- 1.2.5リリース - 2011-08-29
  - 改良
  - 修正
- 1.2.4リリース - 2011-07-29
  - 改良
  - 修正
  - 感謝
- 1.2.3リリース - 2011-06-29
  - 改良
  - 修正
  - 感謝
- 1.2.2リリース - 2011-05-29
  - 改良
  - 修正
- 1.2.1リリース - 2011-04-29
  - 改良
  - 修正
  - 感謝
- 1.2.0リリース - 2011-03-29
  - 改良
  - 修正
  - 実験的
  - 感謝
- バージョン1.1.xのお知らせ
  - 1.1.0リリース - 2011-02-09
- バージョン1.0.xのお知らせ
  - 1.0.8リリース - 2011-02-02
  - 1.0.7リリース - 2011-01-29
  - 1.0.6リリース - 2010-12-31
  - 1.0.5リリース - 2010-12-29
  - 1.0.4リリース - 2010-11-29
  - 1.0.3リリース - 2010-10-29
  - 1.0.2リリース - 2010-09-09
  - 1.0.1リリース - 2010-09-06
  - 1.0.0リリース - 2010-08-29
- バージョン0.xのお知らせ
  - 0.7.7リリース - 2010-08-25
  - 0.7.6リリース - 2010-08-19
- News in Senna period
  - Senna -> groonga - 2009-01-14
  - 2006-04-05
  - 2006-03-03
  - 2006-01-16
  - 2006-01-12
  - 2005-12-22
  - 2005-10-27
  - 2005-09-17
  - 2005-09-08
  - 2005-08-16
  - 2005-07-05
  - 2005-06-23
  - 2005-04-12