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

- English

# News - 4.x

## 4.1.1リリース - 2015-01-29

### 改良

- [windows] エラーコードのかわりにエラーメッセージを表示するようにしました。これによりエラーがわかりやすくなります。

- [実験的][windows] データベースの初期サイズを小さくできるようにしました。以前のバージョンではUNIXとは異なりかなりサイズが大きい初期ファイルをデフォルトで使っていました。この機能を有効にするには `GRN_IO_VERSION=1` 環境変数を指定します。まだ実験的な機能なためデフォルトでは有効にしていません。

- drilldownで `SUM` (合計)、 `MIN` (最小値)、 `MAX` (最大値)、 `AVG` (平均) を算出する機能を使えるようにしました。この機能はラベルつきのdrilldown構文を拡張することで実現しています。drilldown_calc_types に `SUM`、 `MIN`、 `MAX` もしくは `AVG` を指定します。対象となるカラムは drilldown_calc_target として指定します。返り値はdrilldownによるグループ化した結果から算出されます。

- [実験的] `--with-jemalloc` オプションを指定すると `malloc()/free()` に `jemalloc` の実装を使えるようになりました。マルチスレッドでのパフォーマンス改善が見込めます。例えば、groonga 実行ファイル や Mroonga でパフォーマンスを改善できるでしょう。groonga-httpd は別で、groonga-httpd はマルチスレッドではなく、マルチプロセスモデルで動作しているためです。

- groonga-httpd: 2048バイトを越える越えるエラーメッセージをサポートしました。この変更により、2048バイトを越えてもエラーメッセージが途中で切られることはありません。

- [dump] ストリーム処理できるようになりました。

### 修正

- エラー発生時のエラーコードとエラーメッセージが `strerror()` を呼んで失敗したときに一致しない不具合を修正しました。このせいで、syscallエラーとして不適切なエラーコードを表示することがありました。

- 未定義エラーが発生したときにエラーメッセージにエラーコード(errno)を表示するようにしました。

- [windows] 適切なエラーコードを返すようにしました。

- セクションを指定したマルチカラムインデックスだけが match_columns に指定されているときに、検索結果が正しくないという不具合を修正しました。例えば、 `memo_index` という `title` カラムと `content` カラムを対象としたマルチカラムインデックスがあるとします。この不具合は `memo_index[0]` というように `title` カラムのインデックスが match_columns に指定されている場合に発生します。

- mecab: MeCab 0.993で発生する `mecab_strerror(NULL)` に対する回避策を追加しました。この修正がないとMeCabの辞書がない場合にGroongaが強制終了します。 [田沼さんが報告]

- groonga-httpd: カスタムログの指定が無視される不具合を修正しました。

- groonga-httpd: データベースが空の状態でdumpすると返ってこない不具合を修正しました。

### 感謝

- 田沼修平さん

## 4.1.0リリース - 2015-01-09

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

もし、すでに4.0.9にアップグレードした場合は4.1.0にアップグレードしてください。アップグレード後、すべてのインデックスを作りなおしてください。次のようにインデックスを削除してから再作成することでインデックスを作りなおすことができます:

    column_remove TABLE INDEX_COLUMN
    column_create TABLE INDEX_COLUMN COLUMN_INDEX|...

参考

- column_remove

- column_create

注釈

Groonga 4.0.9でインデックスを変更していない場合はインデックスを作りなおす必要はありません。「変更」とは「追加」、「削除」、「更新」のことです。Groonga 4.0.9で「検索」だけしていた場合はインデックスを作りなおす必要はありません。

### 修正

- インデックスが壊れるかもしれない問題を修正しました。ただし、Groonga 4.0.9で修正した次の問題は再発します。

  - インデックス化された値を一度に大量に削除または更新するとクラッシュする問題を修正しました。 [groonga-dev,02942] [kashiharaさんが報告]

## 4.0.9リリース - 2014-12-29

注意

4.0.9ではなく4.1.0を使ってください。4.1.0はインデックスが壊れるかもしれないという深刻な問題があります。

### 改良

- [groonga-httpd] 正式機能扱いにしました。

- [ドキュメント] `groonga-token-filter-stem` パッケージの説明を追加しました。 [GitHub#259] [横山さんがパッチを提供]

- [ビルド] `make` なしでの `make install` に対応しました。 [やまだあきらさんが報告]

- [実験的] 実行中のリクエストを中断する request_cancel コマンドを追加しました。

- [実験的] `grn_db_recover()` を追加しました。

- `UInt64` のベクターのように固定長の値のベクターの索引作成に対応しました。 [groonga-dev,03014] [ふなとさんが報告]

- [実験的] grndb を追加しました。

- [deb] armhfアーキテクチャーに対応しました。

- [Groonga HTTPサーバー] HEADに対応しました。

- [ドキュメント] 導入 を更新しました。 [GitHub#270] [玉野さんがパッチ提供]

- [ドキュメント] その他 を更新しました。 [GitHub#271] [畑ケさんがパッチ提供]

- [TokenFilterStem] 大文字アルファベット、数字、 `-` 、 `'` だけで構成されているトークンに対応しました。これにより、 TokenFilterStem はMySQL互換ノーマライザーと一緒に使うことができるようになりました。

- [truncate] カラムに対応しました。

- [truncate] パラメーター名を `table` から `target_name` に変更しました。後方互換性のために `table` パラメーターも使うことはできますが、新しく書くコードでは使わないでください。

- `grn_column_truncate()` を公開しました。

- lock_clear を追加しました。

- clearlock を非推奨扱いにしました。

- [後方非互換] デーモンモードの groonga-httpd のように `umask(0)` 環境で新しく作るファイルのパーミッションを誰でも書き込めるパーミッションにすることを止めました。これは後方非互換な変更ですが、以前の挙動はセキュリティーリスクがあるため変更します。

### 修正

- BSDベースのシステムでのビルドエラーを修正しました。 [GitHub#253] [畑ケさんが報告]

- OS Xでのビルドエラーを修正しました。 [GitHub#253] [畑ケさんが報告]

- 存在しない参照に対する等価演算が常にマッチするというリグレッションバグを修正しました。

- インデックス化された値を一度に大量に削除または更新するとクラッシュする問題を修正しました。 [groonga-dev,02942] [kashiharaさんが報告]

- BSDベースのシステムで静的インデックス構築が動かないというリグレッションバグを修正しました。 [GitHub#264] [長内さんが報告]

- `--with-libstemmer` configureオプションが無視されるという問題を修正しました。

- [deb] logrotateスクリプトがシンタックスエラーになっている問題を修正しました。

- コマンドバージョン が `2` のとき、グループ化した結果を取得できない問題を修正しました。 [GitHub ranguba/rroonga#38] [結城さんが報告]

### 感謝

- 畑ケさん

- 横山さん

- やまだあきらさん

- kashiharaさん

- 長内歩さん

- ふなとさん

- 結城洋志（Piro）さん

- 玉野裕也さん

## 4.0.8リリース - 2014-11-29

### 改良

- [deb] Travis-CIの動作環境であるUbuntu 12.04のサポートを再び有効にしました。

- [mruby] デバッグ用途に `"pp"` をサポートしました。内部のオブジェクトをよりわかりやすく表示できるようになりました。

- 全文検索のクエリで `--match_columns` と `--query` の組み合わせでインデックスが使えず逐次検索になる場合、 `--match_columns` に指定されているカラムが1つだけなら検索できるようにしました。 [groonga-dev,02902] [篠田さんが報告]

- [実験的] in_values で逐次検索に自動的に切り替えられるようにしました。逐次検索のほうがインデックスを使った検索よりも速い場合があります。たとえば、絞り込む前のレコードの件数が、さらに `in_values` と `AND` で絞り込むのに使うレコード数に比べてだいぶ少ないような場合です。このとき `GRN_IN_VALUES_TOO_MANY_INDEX_MATCH_RATIO` 環境変数の値が逐次検索をするのか、インデックスを使って検索をするのかの閾値として使われます。

- [mruby] 相対パスのスクリプトの読み込みをサポートしました。

- mrubyが有効な場合にクエリオプティマイザーのテストを簡単に書けるようになりました。

- トークンフィルターを使った静的なインデックス作成をサポートしました。 [GitHub#239] [村上さんがパッチ提供]

- [実験的] between でも逐次検索への自動切り替えをサポートしました。 `GRN_BETWEEN_TOO_MANY_INDEX_MATCH_RATIO` 環境変数を閾値として使います。基本的な考え方は `GRN_IN_VALUES_TOO_MANY_INDEX_MATCH_RATIO` と同じです。

- [実験的] select コマンドで複数のキーを指定してドリルダウンできるようになりました。この機能のために構文を拡張しています。新しいドリルダウンの構文では `--drilldown[LABEL1].keys COLUMN1,COLUMN2` をキーの指定に使います。output_columnsの場合は `--drilldown[LABEL1].output_columns _value.COLUMN1,_value.COLUMN2,_nsubrecs` です。以前のバージョンでは、複数のキーによるドリルダウンを実現するにはクライアントアプリケーション側でそのような機能を実装するしかありませんでした。ドリルダウンでグループ化されたレコードのキーを参照するには、 `_key[N]` を使います。

- インデックスなしでも `'参照型のカラム @ "query"'` で検索できるようになりました。

- [実験的] range_filter コマンドを追加しました。たいていの場合、特定の範囲のレコードを取得するなら select コマンドよりも速いです。これはマッチしたレコード数を返さないので、そのためのレコードの走査が不要なためです。ただし、ドリルダウンをサポートしていないなどの制限があります。 `range_filter` は特定の範囲の最初の `N` レコードを必要とするランキングなどの用途に向いています。

- [windows] Windows上でも `groonga-httpd` が使えるようになりました。

- ドリルダウンでベクター型のカラムをサポートしました。

- [deb] デフォルトのHTTPサーバーパッケージを `groonga-httpd` にしました。 `groonga-server-http` は非推奨です。ただし、 groonga 実行ファイル のHTTPサーバー機能自体はまだ使えます。もし従来のような簡易HTTPサーバーを使いたいなら、適宜引数を groonga 実行ファイル へとコマンドライン経由で渡します。

- WindowsのCI環境であるAppVeyor向けの設定ファイルを追加しました。 [groonga-dev,02970,02981] [畑ケさんがパッチ提供]

### 修正

- [doc] table_create の重複した実行例を修正しました。[GitHub groonga.org#14] [横山さんが報告]

- ネストしたインデックスで `X._key` に対する全文検索をしたときに空の結果を返す不具合を修正しました。

- BSD で仕様が厳密になった `mkostemp(3)` に対して渡しているフラグを修正しました。 [GitHub#240] [Kuriyamaさんがパッチ提供]

- select コマンドが 誤った値の型(table)をインデックスカラムの値の型として返す不具合を修正しました。 `UInt32` を返すように修正しています。この変更はレスポンスのヘッダー部分にのみ影響します。これにより検索結果は変りません。

- Time型と文字列型の比較( `<` , `<=` , `>` , `>=` , `!=` )が誤った結果を返す不具合を修正しました。

- `"x*"` といった一文字の前方一致検索が行えない不具合を修正しました。[GitHub#242] [村上さんがパッチ提供]

- `ShortText` 型の値に対するドリルダウンを `--filter` と一緒に使ったときにメモリリークしていたのを修正しました。

- `"DDL:set_token_filters"` のログに `","` が抜けていたのを修正しました。 [村上さんが報告]

### 感謝

- 篠田さん

- 横山さん

- 村上さん

- 栗山さん

- 畑ケさん

## 4.0.7リリース - 2014-10-29

### 改良

- [windows] Windows上でもmrubyを組み込んで使えるようにしました。

- プラグインAPIとしてトークンフィルタを追加しました。

- TokenFilterStopWord プラグインを追加しました。このプラグインは `is_stop_word` カラムの値がtrueのものをストップワードとして扱います。

- [doc] クライアントライブラリーへのリンク先を紹介する クライアント セクションを追加しました。 [GitHub#210] [村上さんがパッチ提供]

- [doc] ドキュメント構成を見直しました。 サジェスト や 位置情報検索 は リファレンスマニュアル 以下にまとめました。 [GitHub#206] [村上さんがパッチ提供]

- [deb] ストップワードトークンフィルタープラグインを追加しました。 [GitHub#216] [畑ヶさんがパッチ提供]

- [deb] 同梱しているファイルの著作権表記を debian/copyright でより明確にしました。

- LZOによる圧縮サポートをやめました。

- LZ4による圧縮をサポートしました。 [GitHub#223] [村上さんがパッチ提供]

- in_values を追加しました。`==` や `OR` を繋げて書いていたクエリ ( `((COLUMN == "a") OR (COLUMN == "b") OR (COLUMN == "c"))` ) のかわりにこれを使うのがパフォーマンスの観点からお勧めです。

- [load] `TABLE_NO_KEY` を使ったテーブルで既存のレコードを `_id` を指定して更新できるようになりました。

- TokenFilterStem プラグインを追加しました。ステミングの機能を追加します。この機能をトークンフィルタで使うには、libstemmer ライブラリーが必要です。

- [doc] トークンフィルター のドキュメントを追加しました。 [GitHub#227] [村上さんがパッチ提供]

### 修正

- [doc] Rangubaプロジェクトへのリンクを修正しました。 [GitHub#212] [村上さんがパッチ提供]

- [httpd] バンドルしているnginxのバージョンを1.7.6に更新しました。 [GitHub#208] [畑ヶさんがパッチ提供]

- [power8] ビルドに失敗していたのを修正しました。詳細は http://lists.askmonty.org/pipermail/commits/2014-October/006752.html を参照してください。 [Sergey Vojtovichさんがパッチ提供]

- `char` が `unsigned char` としてビルドされているとURLエンコーディングに失敗する不具合を修正しました。 [GitHub#217]

- `TABLE_DAT_KEY` テーブルを select したときに検索結果が空になる不具合を修正しました。 [GitHub#220]

- ベクターカラムを表示するときにメモリリークするのを修正しました。エラーが発生したときの詳細表示で発生します。

- Zlibカラム圧縮でメモリリークする問題を修正しました。 [GitHub#221] [村上さんがパッチ提供]

- `--filter` で `Int8` カラムの値に100以下を指定したときに意図しない true を返すことがある不具合を修正しました。この問題により意図しないレコードが検索結果含まれていました。

- ベクターカラムに対する四則演算はエラーになるようにしました。

- ビッグエンディアンの環境では、 `!XXX` が逆の結果を返すのを修正しました。

- 重みつきベクターカラムの内容を出力するさいメモリリークするのを修正しました。

- [dump] dump でのトークンフィルターと `TABLE_NO_KEY` 関連のエラーを修正しました。 [GitHub#215] [村上さんがパッチ提供]

### 感謝

- 村上さん

- 畑ケさん

- Sergey Vojtovichさん

## 4.0.6リリース - 2014-09-29

### 改良

- debian/copyrightを機械可読な形式でルールに沿うように更新しました。[やまねさんが報告]

- [deb][rpm] HTTP経由でnginxをコントロールするのではなくシグナルを使うようにしました。このほうがnginxらしいinit scriptです。

- [doc] [ 実行ファイル ] の英語ドキュメントを更新しました。 [GitHub#196] [横山さんがパッチ提供]

- [OS X] HomebrewでSphinxに関するエラーメッセージへの対処方法を追加しました。 [GitHub#198] [cosmo0920さんがパッチ提供]

- [mruby] mrubyによるクエリオプティマイザが範囲検索で実用的になりました。例えば、mrubyを使うことによるオーバーヘッドは、次のようなクエリで無視できます。"between(X, 0, 'exclude', 100, 'include')" - "X > 0 && X <= 100"。

- [doc] バグレポートの報告先として GitHub を推奨することにしました。これまではRedmineで、アカウントは管理者による承認が必要でした。これからは、GitHubで気軽に問題を報告してください。 [GitHub#202] [cosmo0920さんがパッチ提供]

- [doc] C APIのドキュメントを翻訳しました。 [GitHub#203] [野首さんがパッチ提供]

- `'*S10"..."'` というシンタックスで類似度の閾値をカスタマイズできるようにしました。

- column_create にソースカラムの検証機能を追加しました。もし、ソースカラムが存在しない場合は column_create は `false` を返し、カラムは作られません。

- [deb] Debian jessieとsidのサポートをやめました。

### 修正

- 類似文書検索で、トークンを選択する際にIDF (逆文書出現頻度) を使っていない不具合を修正しました。以前のバージョンでは、IDFではなく、トークンのIDを使ってしまっていました。[groonga-dev,02731] [groonga-dev,02754] [三谷さん、warp kawadaさんが報告]

- レコードを削除する際にクラッシュする問題を修正しました。この問題は、削除を行うクエリに `_key` が含まれており、その `_key` を参照するインデックスカラムが2つ以上ある場合に発生します。

- 未使用変数 'e' に対するコンパイラの警告を修正しました。 [GitHub#197] [cosmo0920さんがパッチ提供]

- [fedora][httpd] ログディレクトリがないとサービス開始時に失敗するのを修正しました。

- [mruby] `--disable-mruby` でビルドしたときのエラーを修正しました。 [GitHub#200] [cosmo0920さんがパッチ提供]

- MariaDBにMroongaをバンドルしたパッケージをビルドする際の警告(CMP0014)を修正しました。 [GitHub#201] [cosmo0920さんがパッチ提供]

- "*" が空文字列に対する前方一致検索として扱われてしまう不具合を修正しました。 [groonga-dev,02796] [かずひこさんが報告]

- [httpd] バンドルしているnginxのバージョンを1.7.5に更新しました。セキュリティーに関する修正(CVE-2014-3616)を含んでいます。

### 感謝

- やまねひできさん

- 横山さん

- cosmo0920さん

- 野首さん

- 三谷さん

- warp kawadaさん

- かずひこさん

## 4.0.5リリース - 2014-08-29

### 改良

- Ubuntu 13.10 (Saucy Salamander)のサポートをやめました。

- 重みつきベクターカラムの表示をXML出力のときにもサポートしました。

- [ between ] 範囲外のキーも指定できるようにしました。 [GitHub#183] [村上さんがパッチ提供]

- [mruby] バンドルしている正規表現の実装をOnigmoに変更しました。

- タグ出力のために highlight_full と highlight_html を追加しました。 [GitHub#185] [村上さんがパッチ提供]

- [doc] 古くなっていた functions/commands リファレンスを更新しました。 [GitHub#188] [GitHub#189] [村上さんがパッチ提供]

- [benchmark] 平均と中央値をベンチマーク結果に含めるようにしました。

- プラグイン開発者向けに `grn_selector_func()` と `grn_proc_set_selector()` を公開しました。 [GitHub#190] [村上さんがパッチ提供]

- [ tokenize ] "mode" オプションを追加して、振舞いを変更できるようにしました。`GET` あるいは `ADD` を指定できます。 [GitHub#191] [GitHub#192] [村上さんがパッチ提供]

- 近傍検索で、'*N"A Z"' という構文をサポートしました。

- トークンをスキップしたり、トークンだけでなくその位置もスキップするかどうかをカスタマイズできるようにしました。この機能はトークナイザープラグインを開発するときに有用です。 [GitHub#193] [村上さんがパッチ提供]

- [doc] GitHubのIssuesによるバグレポートで日本語も受けつけるようにしました。 [6elzさんが報告] [groonga-dev,02651]

- [doc] チュートリアルの英語版を更新しました。[GitHub#194] [cosmo0920さんがパッチ提供]

### 修正

- [php] `grn_ctx_recv()` を呼び出したときのメモリリークを修正しました。[GitHub#184] [@do-akiさんがパッチ提供]

- [php] `grn_ctx_close()` を呼んだときにメモリを二重に解放しないようにしました。[GitHub#184] [@do-akiさんがパッチ提供]

- ツリー外でのビルドを再度サポートしました。

- [httpd] バンドルしているnginxのバージョンを1.7.4に更新しました。セキュリティーに関する修正を含んでいます。

- インデックス更新の際に無限ループが発生することがある問題を修正しました。[groonga-dev,02673] [皆川さんが報告]

- 静的なインデックス構築方法 を使ったときに、トークンを含むドキュメント数（document frequency）の値が不正な値になっている問題を修正しました。 [groonga-dev,02691] [村上さんが報告]

### 感謝

- @do-akiさん

- 村上さん

- 6elzさん

- 皆川さん

- cosmo0920さん

## 4.0.4リリース - 2014-07-29

### 改良

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

- 重みつきベクターカラムを正しく扱えるようにしました。

- [ groonga-benchmark ] HTTPに関する説明を追加しました。

- [ チュートリアル ] 英語のドキュメントを更新しました。

- [example] Ruby 1.9以降でedict2grn.rbが動作するようにしました。

- [http][admin] 管理画面で英語を標準にしました。

### 修正

- レスポンスでシンタックスエラーの発生個所を正しく表示できるようにしました。

- [httpd] Clangでビルドエラーとなる問題を修正しました。 [GitHub clear-code/rurema-search#11] [nikuさんが報告]

### 感謝

- nikuさん

## 4.0.3リリース - 2014-06-29

### 改良

- [実験的][ Groonga HTTPサーバー ] POSTをサポート。

- [windows] libwinpthread-1.dllをバンドル。新しいlibgcc_s_sjlj-1.dllがlibwinpthread-1.dllに依存しているため。 [groonga-dev,02398] [横山さんが報告]

- [ groonga 実行ファイル ] GQTPのデフォルトポート番号を10043に変更。サーバーパッケージではデフォルトで10043を使っているため。 [GitHub#172] [村上さんがパッチ提供]

- [ normalize ] 引数チェックを強化。 [groonga-dev,02409][GitHub:#174] [GMOメディア株式会社さんが報告][村上さんがパッチ提供]

- [ tokenize ] 引数チェックを強化。

- [ Groonga HTTPサーバー ] `Expect: 100-Continue` を使うリクエストをサポート。

- `grn_proc_get_type()` を公開。

- [ groonga-suggest-learner ] `--log-path` オプションと `--log-level` オプションを追加。

- `GRN_CTX_USE_QL` を非推奨にした。

- `GRN_CTX_BATCH_MODE` を非推奨にした。

- `grn_text_printf()` を追加。

- `grn_text_vprintf()` を追加。

- それぞれのクエリーログのサイズ制限を撤廃。

- `grn_plugin_expr_var_init()` を追加。 [GitHub#175][村上さんがパッチ提供]

- `grn_plugin_command_create()` を追加。 [GitHub#175][村上さんがパッチ提供]

- [GitHub#176] 重み付きの参照ベクターカラムをサポート。

- [plugin] 内部APIではなく公開APIを使うように変更。 [GitHub#177][GitHub#178] [村上さんがパッチ提供]

- [doc][plugin] プラグイン用のAPIを追加。 [GitHub#179] [村上さんがパッチ提供]

- [windows] Visual C++ 2010を再サポート。 [groonga-dev,02454] [cosmo0920さんが報告]。

### 修正

- [rpm][groonga-server-gqtp] GQTPではなくHTTPが使われる問題を修正。 [GitHub#173] [村上さんがパッチ提供]

- [ select ] adjuster に指定した値がシンタックスエラーだとクラッシュする問題を修正。

### 感謝

- 横山さん

- 村上さん

- GMOメディア株式会社さん

- cosmo0920さん

## 4.0.2リリース - 2014-05-29

### 改良

- [doc] groonga-suggest-learner のドキュメントを更新しました。

- [doc] ファイルの更新方法に関するドキュメントを更新しました。 [GitHub#160] [cosmo0920さんがパッチ提供]

- [doc] ドキュメント中で「Groonga」という標記を使うようにしました。 [GitHub#162][GitHub#163][GitHub#164] [cosmo0920さんがパッチ提供]

- Ubuntu 14.04 Trusty Tahrをサポート。

- Ubuntu 12.10のサポートを終了しました。

- Ubuntuパッケージの配布場所としてLaunchpadのPPAを使うようにしました。詳細は Ubuntu を確認してください。

- `/d/` から始まるリクエストはすべてAPIリクエストとして処理するようになりました。GroongaのHTTPサービスでファイルを提供したい場合は、 `/d/` 以外から始まるパスにファイルを置いてください。

- [munin] groonga-httpd をサポートしました。 [村上さんが報告]

- 夏時間をサポートしました。 [#2546]

- [doc] Mac OS X に `--with-mecab` の説明を追加しました。

- [http] シンタックスエラーが発生したときのHTTPのリターンコードを `500 Internal Server Error` から `400 Bad Request` に変更しました。

- [http][admin] jQueryのJSONプラグインを削除しました。 [GitHub#168] [大関さんがパッチ提供]

- [http][admin] strictモードを有効にしました。 [GitHub#169] [大関さんがパッチ提供]

- 変数の値を取得するAPIを Plugin のAPIとして使えるようにしました。 [GitHub#170] [村上さんがパッチを提供]

  - `grn_plugin_proc_get_var()` を追加。

  - `grn_plugin_proc_get_var_by_offset()` を追加。

- [実験的] tokenizer_list を追加しました。 [GitHub#171] [村上さんがパッチ提供]

- [実験的] normalizer_list を追加しました。 [GitHub#171] [村上さんがパッチ提供]

### 修正

- [index] 最大セグメント数が間違っていた問題を修正しました。この問題によりインデックスカラム用のすべてのリソースを使い切るとクラッシュしていました。 [#2438] [GMOメディア株式会社さんが報告]

- [doc] CentOS の中のtypoを修正しました。 [GitHub#166] [村上さんがパッチ提供]

- [doc] select で `drilldown_output_columns` のデフォルト値が間違っていた問題を修正しました。 [GitHub#167] [村上さんがパッチ提供]

- [doc] クエリー構文 で不足していた `\` エスケープの例外ケースを追加しました。 [@Yappoさんが報告]

### 感謝

- cosmo0920さん

- 村上さん

- 大関さん

- GMOメディア株式会社さん

- @Yappoさん

## 4.0.1リリース - 2014-03-29

### 改良

- [doc] 返り値のヘッダ詳細 (出力形式) についてのリンクを追加しました。

- JSONロード時のベクターの値とオブジェクトの値を表示できるようにしました。ロードに失敗したときのデータの詳細がわかるようになりました。

- selectコマンドに `adjuster` オプションを追加しました。adjusterオプションのシンタックスは INDEX_COLUMN @ STRING_LITERAL (* FACTOR) です。

- 重み付きベクターカラム をサポートしました。重みつきベクターを使うにはカラム作成時に 'COLUMN_VECTOR|WITH_WEIGHT' を指定する必要があります。

- SunOSでビルドに必要なMIN/MAXの定義がなかったので追加しました。[GitHub#154] [Sebastian Wiedenrothさんがパッチ提供]

- 使われなくなった領域を再利用するように改善しました。これによりデータべースの肥大化を抑制します。

- [doc] groonga-suggest-httpd のGETパラメータに関するドキュメントを追加しました。

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

- [doc] ベクターカラム のドキュメントを追加しました。

- [column_list] 重みつきベクターカラムを表示できるようにしました。

- [column_create] マルチカラムインデックスを作成するときに、WITH_SECTIONフラグが指定されていない場合のエラーチェックを追加しました。

- [httpd] NginxHttpStubStatusModuleをgroonga-httpdで有効にしました。[長野雅広さんが提案]

### 修正

- 除算によるオーバーフローが発生する不具合を修正しました。例えば、'COLUMN(最小値) / -1' をInt32やInt64で定義したカラムに適用すると発生します。[#2307]

- 剰余演算 '%' ではなく、除算 '/' を行ってしまう不具合を修正しました。[#2307]

- [doc] column_rename のドキュメントの説明の誤りを修正しました。 [nise_nabeさんが報告]

- 配列の領域外アクセスが発生しうる問題を修正しました。[GitHub#158] [dcb314さんが報告]

### 感謝

- Sebastian Wiedenrothさん

- 長野雅広さん

- nise_nabeさん

- dcb314さん

## 4.0.0リリース - 2014-02-09

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

### 改良

- [normalizer] "checks" というノーマライズ前の文字列だと次の文字の位置がどこか計算するのに使う値を表示できるようにしました。この機能を有効にするには WITH_CHECK フラグを使用します。

- [deb] Ubuntu 13.04 (Raring Ringtail)のサポートをやめました。

### 修正

- `grn_expr` のオブジェクトが解放後にアクセスされクラッシュしてしまう不具合を修正しました。Groongaサーバーを利用している場合にはこの不具合に該当しません。主にこの不具合の影響を受けるのはRroongaユーザーです。この不具合はRroongaのAPIに `_key` のような疑似カラム名を含んだ指定をすることで発生します。

- Groonga 3.0.8で導入されたカスケード削除を意図せず実行しないようにしました。参照元とインデックスのドメインが異なる場合にはカスケード削除を実行しないようにしました。 [groonga-dev,02073] [yokuさんが報告]

- `grn_snip` 構造体を公開しないようにしました。 `grn_snip` のかわりに `grn_obj` を使うようにしてください。もし `grn_snip_close` を使っていたら、 `grn_obj_close` に置き換えてください。

- [snippet_html] --queryが空のときにクラッシュする不具合を修正しました。 [groonga-dev,02097] [村上さんが報告]

- [snippet_html] カラムの中身が空のときのALERTレベルのメッセージを抑制するようにしました。 [groonga-dev,02097] [村上さんが報告]

- [groonga-httpd] "off" が通常のパス名として `groonga_query_log_path` で使われてしまう不具合を修正しました。 [groonga-dev,02113] [山本良二さんが報告]

### 感謝

- yokuさん

- 村上さん

- 山本良二さん