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

- English

# News - 5.x

## 5.1.2リリース - 2016-01-29

### 改良

- 条件が `true` や `29` のような定数値のときのシーケンシャルサーチのパフォーマンスが向上しました。
- 条件が `x == 29` や `x < 29` のような定数値との二項演算のときのシーケンシャルサーチのパフォーマンスが向上しました。
- [select] コマンドバージョン が2のとき、スコアーの型を `Int32` から `Float` に変更しました。現在のデフォルトのコマンドバージョンは1です。コマンドバージョン2は実験的な扱いです。そのため、通常のユーザーはこの変更による影響はありません。 [GitHub#450][村上さんがパッチ提供]
- [grn_ts] マッチ演算子をサポートしました。
- [grndb] `check` コマンドに `--target` オプションを追加しました。チェック対象を減らすことができます。
- [Windows] バンドルしているmsgpackを1.0.1から1.3.0に更新しました。
- [Windows] バンドルしているMeCabを0.98から0.996に更新しました。
- [`grn_hash_size()`] ハッシュテーブルの内のレコード数を返す新しいAPIを追加しました。
- [`GRN_HASH_TINY`] 省スペースバージョンのハッシュテーブルを作るためのフラグを追加しました。
- [`grn_dump_table_create_flags()`] テーブルの `flags` の値を table_create の `flags` パラメーターのフォーマットに変換するAPIを追加しました。
- [`grn_dump_column_create_flags()`] カラムの `flags` の値を column_create の `flags` パラメーターのフォーマットに変換するAPIを追加しました。
- [`grn_plugin_get_names()`] データベース内のすべてのプラグイン名を返すAPIを追加しました。
- [`grn_column_get_all_index_data()`] テーブルまたはデータカラムに対するインデックス情報をすべて返すAPIを追加しました。
- [schema] インデックスを張っているテーブルとデータカラムに、該当インデックスの情報を追加しました。
- [`grn_config_get()`] `grn_conf_get()` からリネームしました。
- [`grn_config_set()`] `grn_conf_set()` からリネームしました。
- [`grn_config_delete()`] 設定項目を削除するAPIを追加しました。
- [config_set] 設定項目をセットするコマンドを追加しました。
- [config_get] 設定項目の値を取得するコマンドを追加しました。
- [config_delete] 設定項目を削除するコマンドを追加しました。
- [`grn_config_cursor_open()`] すべての設定項目を列挙するカーソルを開くAPIを追加しました。
- [`grn_config_cursor_next()`] カーソルを次の設定項目に動かすAPIを追加しました。
- [`grn_config_cursor_get_key()`] 現在の設定項目のキーを取得するAPIを追加しました。
- [`grn_config_cursor_get_value()`] 現在の設定項目の値を取得するAPIを追加しました。
- [エイリアス] テーブル・カラム名のエイリアスをサポートしました。
- [ハッシュテーブル] 総キーサイズのオーバーフローチェックを追加しました。
- [dump] config_set で設定した設定項目のダンプに対応しました。
- [パトリシアトライ] インスペクションを改良しました。 [GitHub#452][GitHub#457][村上さんがパッチ提供]
- [`grn_get_global_error_message()`] プロセス内の現在のエラーメッセージを返すAPIを追加しました。
- [lock_acquire] データベース・テーブル・カラムのロックを取得するコマンドを追加しました。
- [lock_release] データベース・テーブル・カラムのロックを開放するコマンドを追加しました。
- [groonga-httpd] バンドルしているnginxのバージョンを1.9.7から1.9.10に更新しました。

### 修正

- mruby関連のクラッシュバグを修正しました。
- [Windows] インストーラー内のラベルを修正しました。 [groonga-dev,03825][篠田さんが報告]
- [doc] 誤字を修正しました。 [GitHub#456][GitHub#458][tSU_RooTさんがパッチを提供]
- [Memcachedバイナリプロトコル] 説明を追加しました。 [GitHub#454][佐藤さんがパッチ提供]
- リクエストの `command_version` パラメーターで指定した コマンドバージョン がリセットされない問題を修正しました。

### 感謝

- 村上さん
- 篠田さん
- tSU_RooTさん
- 佐藤博之さん

## 5.1.1リリース - 2015-12-29

### 改良

- [スクリプト構文] 特定の等価比較をサポートしているインデックスを使った検索を指定するために `INDEX_COLUMN == VALUE` と書けるようになりました。
- 転置インデックスモジュールから出力された連続した同じメッセージを圧縮して「○件同じメッセージが出力された」というログに変換するようにしました。
- 別のプロセスからtruncateされたテーブルを検出できるようになりました。 [GitHub#447] [groonga-dev,03761] [Yutaro SHIMAMURAさんが報告]
- [`grn_db_recover()`] 壊れたオブジェクトを検出できるようになりました。
- `COLUMN @~ "CONSTANT_PATTERN"` のように定数のパターンを指定した 正規表現 マッチでシーケンシャルスキャン検索になったときのパフォーマンスを改善しました。

### 修正

- MessagePackサポート付きでビルドしたときのビルドエラーを修正しました。 [groonga-dev,03708] [杉本さんが報告]
- [mruby] エラー発生時のクラッシュバグを修正しました。現在のところ、回避策としてmrubyの例外機能を無効にしています。
- [thread_limit] `thread_limit?max=1` が現在実行中のスレッド数を `1` にしない可能性がある問題を修正しました。
- [thread_limit] `thread_limit?max=1` が返ってこないかもしれない問題を修正しました。
- [チューニング] `sysctl` の引数を修正しました。 [GitHub#448] [佐藤さんが報告]

### 感謝

- 杉本涼さん
- Yutaro SHIMAMURAさん
- 佐藤博之さん

## 5.1.0リリース - 2015-11-29

### 改良

- [パトリシアトライ] 最大総キーサイズのチェックを追加しました。最大総キーサイズについては 制限事項 を参照してください。
- [grndb] 壊れたオブジェクトがないかどうかのチェックを追加しました。このチェックでオブジェクトを開けないケースを検出できます。
- [`grn_obj_reindex()`] 既存のインデックスを作り直す新しいAPIを追加しました。
- [reindex] 既存のインデックスを作り直す新しいコマンドを追加しました。
- [転置インデックス] クエリーに対する見積もり精度を改善しました。
- [logical_range_filter] シーケンシャルサーチ用のフォールバックモードを追加しました。もし、シーケンシャルサーチでたくさんのレコードをチェックしても必要な件数のレコードが見つからなかった場合は、インデックスを使った検索に切り替えます。
- [`grn_get_package_label()`] パッケージのラベルを返す新しいAPIを追加しました。 `Groonga` を返します。
- [Groonga HTTPサーバー] レスポンスヘッダーに `Server: Groonga/VERSION` を追加しました。
- [groonga-httpd] `grn_ctx` オブジェクトを再利用することでパフォーマンスを改善しました。
- [`grn_file_reader`] `fgets()` と同等の機能を提供する新しいAPIを追加しました。これで groonga 実行ファイル がクラッシュする問題を直しました。もし、 groonga 実行ファイル がVisual Studioでビルドされていて、Cランタイムを組み込んでいるときはクラッシュしていました。
- [prefix_rk_search] 前方一致RK検索機能を提供する新しいセレクターを追加しました。
- [`grn_obj_is_accessor()`] オブジェクトがアクセサーかどうかをチェックする新しい述語を追加しました。
- [`grn_obj_is_key_accessor()`] オブジェクトが `_key` 擬似カラム かどうかをチェックする新しい述語を追加しました。
- JSON出力で プリティープリント をサポートしました。

### 修正

- [転置インデックス] ログレベルが `debug` のときに無限ループになる可能性がある問題を修正しました。
- シーケンシャルサーチのとき、 `@` 演算子（マッチ演算子）がマッチするべきレコードにマッチしないことがある問題を修正しました。
- [パトリシアトライ] 空のキーが指定されたときに不正な値が返る可能性がある問題を修正しました。 [groonga-dev,03632] [村上さんが報告]

### 感謝

- 村上さん

## 5.0.9リリース - 2015-10-29

### 改良

- [転置インデックス] 開発者向けのログのログレベルを下げました。
- 新しいデータベースを作成したとき、変更をフラッシュするようにしました。これによりクラッシュしたときにデータベースが壊れにくくなります。
- [`grn_geo_table_sort()`] 位置情報インデックスを使ってテーブルをソートする新しいAPIを追加しました。
- [実験的] 式を書き換える仕組み（式リライター）を追加しました。mrubyで独自の式リライターを実装できます。式リライターは式を最適化したり、条件を変更したりなどということができます。
- [実験的] データベース単位で設定値を保存できる仕組みを追加しました。データベースに設定値（キーと値のペア）を追加できます。 TokenFilterStopWord は `is_stop_word` というカラム名をカスタマイズするためにこの仕組みを使う予定です。
- [`grn_conf_set()`] 設定値を設定する新しいAPIを追加しました。
- [`grn_conf_get()`] 設定値を取得する新しいAPIを追加しました。
- [deb] `Architecture` の値を `any` から `all` に変更しました。 [debian-bugs:799167][Matthias Kloseさんが報告]
- [Windows][CMake] MeCabをバンドルしてビルドできるようにしました。 [groonga-dev,03562][佐藤さんが報告]
- [schema] スキーマを返す新しいコマンドを追加しました。スキーマは次の情報を含みます。ロード済みプラグイン、ロード済みトークナイザー、ロード済みノーマライザー、ロード済みトークンフィルター、定義済みテーブル、定義済みカラムという情報です。
- [`grn_plugin_win32_base_dir()`] 非推奨になりました。代わりに `grn_plugin_windows_base_dir()` を使ってください。
- [`grn_plugin_windows_base_dir()`] `grn_plugin_win32_base_dir()` からリネームしました。
- [`grn_obj_is_type()`] 指定した値が型オブジェクトの場合は真を返す新しいAPIを追加しました。
- [`grn_obj_is_tokenizer_proc()`] 指定した値がトークナイザーオブジェクトの場合は真を返す新しいAPIを追加しました。
- [`grn_obj_is_normalizer_proc()`] 指定した値がノーマライザーオブジェクトの場合は真を返す新しいAPIを追加しました。
- [`grn_obj_is_token_filter_proc()`] 指定した値がトークンフィルターオブジェクトの場合は真を返す新しいAPIを追加しました。
- [`grn_ctx_get_all_types()`] データベース中のすべての型オブジェクトを返す新しいAPIを追加しました。
- [`grn_ctx_get_all_tokenizers()`] データベース中のすべてのトークナイザーオブジェクトを返す新しいAPIを追加しました。
- [`grn_ctx_get_all_normalizers()`] データベース中のすべてのノーマライザーオブジェクトを返す新しいAPIを追加しました。
- [`grn_ctx_get_all_token_filters()`] データベース中のすべてのトークンフィルターオブジェクトを返す新しいAPIを追加しました。
- [`grn_ctx_output_uint64()`] 64bit符号なし整数を出力する新しいAPIを追加しました。
- [`grn_ctx_output_null()`] `NULL` を出力する新しいAPIを追加しました。
- [`GRN_OBJ_IS_TRUE()`] 指定したオブジェクトが真と評価される値なら真を返す新しいAPIを追加しました。
- [実験的] デフォルトでgrn_tsを組み込みました。
- [Ubuntu] Ubuntu 15.10 Wily Werewolfのサポートを追加しました。

### 修正

- [パトリシアトライ] 新しいエントリーを追加したときに意図せずにレコード数が増えるかもしれない問題を修正しました。 [GitHub#417]
- [パトリシアトライ] 初期化せずに変数を使ってしまうかもしれない問題を修正しました。
- [パトリシアトライ] `grn_pat_cursor_next()` が無限ループに入ってしまうかもしれない問題を修正しました。 [GitHub#419]
- [パトリシアトライ] 要素を削除するとパトリシアトライを壊してしまうかもしれない問題を修正しました。 [GitHub#415][groonga-dev,03515][各務さんが報告]
- [パトリシアトライ] 存在しない要素を削除するとパトリシアトライを壊してしまうかもしれない問題を修正しました。 [GitHub#420]
- トークンフィルターオブジェクトに間違ったproc型を指定していた問題を修正しました。

### 感謝

- Matthias Kloseさん
- 各務さん
- 佐藤さん

## 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 実行ファイル] スタンドアローンモードのときは dump の結果の最後に改行を追加するようにしました。

- [プロセスログ] `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 実行ファイル] ロック獲得に成功したかどうかをチェックするようにしました。

- [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 実行ファイル] 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 実行ファイル] `--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 実行ファイル] `thread_count` コマンドによるスレッドの最大数の変更をサポートしました。これは実験的な機能です。

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

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

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

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

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

- [groonga 実行ファイル] `--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] ラベル付きドリルダウンで drilldowns[${LABEL}].calc_types と drilldowns[${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 実行ファイル] 報告されるスレッドの最大数を修正しました。

- [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 実行ファイル] 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 実行ファイル のサーバーモードで `--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 実行ファイル に渡すと常に `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 を前もって実行します。レコード数を取得するには logical_count を使います。
- [cmake] FreeBSD 10.1でのコンパイルエラーを修正しました。[MDEV-7293] [Bernard Spilさんが報告]
- プラグインのディレクトリをカスタマイズできるようにしました。 その場合 GRN_PLUGINS_DIR 環境変数を設定します。

### 修正

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

### 感謝

- 武者さん
- Bernard Spilさん