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

- English

# お知らせ

## 7.0.6リリース - 2017-08-29

### 改良

- 前方一致検索を複数インデックスを指定してできるようになりました。 (例 `--query "Foo*" --match_columns "TITLE_INDEX_COLUMN||BODY_INDEX_COLUMN"`)

- [window_count] `window_count` 関数を追加しました。検索した結果にカウントした値を追加するのに使います。検索結果をもとに分析したり、カウント結果をもとにフィルタしたりすると便利です。

- 以下のAPIを公開しました。

  - `grn_obj_get_disk_usage()` を追加。

  - `GRN_EXPR_QUERY_NO_SYNTAX_ERROR` を追加。

  - `grn_expr_syntax_expand_query_by_table()` を追加。

  - `grn_table_find_reference_object()` を追加。

- [object_inspect] 指定したオブジェクトのディスク使用量を表示できるようになりました。

- クエリーをパースする際にフォールバックする機能をサポートしました。 `QUERY_NO_SYNTAX_ERROR` フラグが `query_flags` に指定されていると有効になります。(標準では無効です) このフラグが設定されていると、シンタックスエラーが発生しなくなります。例えば、"A +" というクエリーは自動的にエスケープされて "A +" という扱いになります。この振る舞いはアプリケーションがユーザーの入力をそのまま検索語句として使い、シンタックスエラーやログに記録されないようにしたい場合に便利です。

- クエリー内の語のスコアを調整できるようになりました。">", "<" と "~"がサポートされています。例えば ">Groonga" は "Groonga" のスコアをインクリメントします。"<Groonga" は "Groonga" のスコアをデクリメントします。"~Groonga" は検索結果についてマッチしたドキュメントのスコアをデクリメントします。"~" は検索結果そのものには影響しません。

- テーブルを削除するときのパフォーマンスを改善しました。 `thread_limit=1` する必要はありません。参照されているテーブルが存在するかチェックする処理をオブジェクトを開かなくてもできるようにしました。その結果としてパフォーマンスが改善しました。

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

### 修正

- [dump] 7番目の引数 ( `--sort_hash_table` )が名前無しだと無視される不具合を修正しました。

### 感謝

## 7.0.5リリース - 2017-07-29

### 改良

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

- [load] UInt64の最大値をロードできるようにしました。以前のバージョンでは意図せず0に変換されてしまっていました。

- 以下のAPIを公開しました。

  - `grn_window_get_size()` [GitHub#725] [村上さんがパッチ提供]

- [math_abs] 絶対値を計算するための `math_abs()` 関数を追加しました。 [GitHub#721]

- `grn_default_logger_set_path()` と `grn_default_query_logger_set_path()` をスレッドセーフにしました。

- [Windows] バンドルしているpcreを8.41に更新しました。

- [normalize] エラー時に冗長な空文字列が出力されないようにしました。

- [functions/time] 0除算が発生したときにエラーメッセージを出力するようにしました。 [GitHub#733] [村上さんがパッチ提供]

- [windows] `ERROR_NO_SYSTEM_RESOURCES` エラーを `GRN_RESOURCE_TEMPORARILY_UNAVAILABLE` にマッピングするようにしました。以前は `rc=-1` をエラーコードとして返していました。ただし実際にどんな問題がおきたのかこれではわかりにくいので、 今回の修正では `rc=-12` を返すようにしています。

- [functions/min][functions/max] ベクターカラムをサポートしました。これでカラムがスカラーなのかベクターなのか気にせず使えるようになりました。 [GitHub#735] [村上さんがパッチ提供]

- [dump] `--sort_hash_table` オプションをサポートしました。ハッシュテーブルの `_key` でのソートには `--sort_hash_table yes` を指定します。

- [between] インデックスカラムを指定できるようになりました。 [GitHub#740] [村上さんがパッチ提供]

- [load] Apache Arrow 0.5.0 以降をサポート。

- [エラーメッセージの解析方法] エラーメッセージの解析方法のドキュメントを追加しました。

- [Debian GNU/Linux] ソースからビルドするときに必要なパッケージのリストを更新しました。

- [Ubuntu] Ubuntu 16.10（Yakkety Yak）のサポートをやめました。2017年7月20日でサポートが切れた（EOLになった）ためです。

### 修正

- テキスト型( `ShortText` など)のベクターカラムに対するインデックスを正しく構築できるようにしました。この修正でインデックス更新後に全文検索でマッチしない問題が解決します。 [GitHub#494]

- [thread_limit] `thread_limit?max=1` というリクエストが同時にきたときにデッドロックが発生する問題を修正しました。

- [groonga-httpd] デフォルトのPIDのパスと再起動時に想定しているPIDのパスがあっていない問題を修正しました。そのせいで groonga-httpd の再起動に失敗していました。 [GitHub#743] [sozakiさんが報告]

### 感謝

- 村上さん

## 7.0.4リリース - 2017-06-29

### 改良

- 物理的なファイルの作成/削除のログを障害の切り分けのために記録するようにしました。 [GitHub#700,#701]

- [in_records] 固定長カラムの検索パフォーマンスを改善しました。速度が50%程度改善する可能性があります。

- [grndb] `--log-path` オプションを追加しました。

- [grndb] `--log-level` オプションを追加しました。

- 以下のAPIを公開しました。

  - `grn_operator_to_exec_func()`
  - `grn_obj_is_corrupt()`

- "固定長カラム 演算子 定数" というようなクエリのパフォーマンスを改善しました。対応している演算子は `==`, `!=`, `<`, `>`, `<=` と `>=` です。

- "カラム 演算子 値 && カラム 演算子 値 && ..." というようなクエリのパフォーマンスを改善しました。

- [grndb] `grndb check` で壊れたオブジェクトの検出をサポートしました。

- [io_flush] `--only_opened` オプションをサポートしました。開いているデータベースオブジェクトのみをフラッシュすることができます。

- [grndb] 参照先のない "inspect" オブジェクトの検出と削除をサポートしました。この状態はコマンド名が `inspect` から `object_inspect` に変更されたことによって発生していました。

### 修正

- [rpm][centos] カスタマイズ版のビルドで意図しないマクロ展開が発生する問題を修正しました。この不具合はGroongaをSRPMからビルドする際にspecファイルの `additional_configure_options` パラメータを使ってリビルドするときのみ発生していました。

- `grn_table_setoperation()` のNULLチェックを追加しました。インデックスが壊れている際に、クラッシュする可能性がありました。 [GitHub#699]

### 感謝

## 7.0.3リリース - 2017-05-29

### 改良

### 修正

- [select] インデックス名を指定した全文検索 のドキュメントを追加しました。

- [インデックス] どのレコードに対するポスティングリストが長すぎるのかわかるように、警告メッセージをログに出すようにしました。

- [load][dump] Apache Arrowをサポートするようにしました。 [GitHub#691]

- [cmake] 静的ライブラリとしてビルドする際に、LZ4をリンクできるようにしました。 [Sergei Golubchikさんがパッチを提供]

- [delete] キャンセルできるようにしました。

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

- 以下のAPIを公開しました。

  - `grn_plugin_proc_get_caller()` を追加。

- インデックスカラムに関連した関数とセレクタを追加しました。

  - 追加されたセレクタ: `index_column_df_ratio_between()`

  - 追加された関数: `index_column_df_ratio()`

### 修正

- [delete] エラーが適切にクリアされていない不具合を修正しました。そのせいで、後続の削除処理に影響し意図しない振る舞いをしていました。

- [windows] ファイルを `O_CREAT` フラグ付きで開くときに、IOのバージョンが正しく検出されない不具合を修正しました。

- [vector_slice] (型のサイズが)4バイトでないベクターカラムをsliceできない不具合を修正しました。 [GitHub#695] [村上さんがパッチ提供]

- (型のサイズが)4バイトでないベクターカラムでベクターの要素をインデックスで指定するとシーケンシャルサーチでマッチしない不具合を修正しました。 [GitHub#696] [村上さんがパッチ提供]

- [logical_select] `min` に月の最終日を指定すると "argument out of range" が発生する不具合を修正しました。

### 感謝

- Sergei Golubchikさん

- 村上さん

## 7.0.2リリース - 2017-04-29

### 改良

- [logical_select] drilldowns[${LABEL}].columns[${NAME}].window.sort_keys と drilldowns[${LABEL}].columns[${NAME}].window.group_keys で複数のキーを指定できるようになりました。

- [Windows] バンドルしているLZ4を1.7.5に更新しました。

- [cache] 永続化キャッシュをサポートしました。

- [log_level] 英語のドキュメントを更新しました。

- 以下のAPIを公開しました。

  - `grn_set_default_cache_base_path()`
  - `grn_get_default_cache_base_path()`
  - `grn_persistent_cache_open()`
  - `grn_cache_default_open()`

- [`groonga --cache-base-path`] 永続キャッシュを使うための新しいオプションを追加しました。

- [groonga-httpd] [groonga_cache_base_path] 永続キャッシュを使うための新しい設定を追加しました。

- [Windows] バンドルしているmsgpackを2.1.1に更新しました。

- [object_inspect] カラム情報を表示するだけでなく、インデックスカラムの統計情報も表示できるようにしました。

- 正規表現の「 `.*` 」というパターンでインデックスを使って検索できるようになりました。 この機能はデフォルトで有効です。環境変数に `GRN_SCAN_INFO_REGEXP_DOT_ASTERISK_ENABLE=no` を設定すると無効化できます。

- [in_records] 既存のテーブルを条件のパターンを指定するのに使うことのできる関数を追加しました。

- [Ubuntu] EOLのため、Ubuntu 12.04のサポートをやめました。

### 修正

- [logical_select] 異なるキャッシュが使われてしまう不具合を修正しました。この問題は動的カラムを使っているときに発生していました。

- [logical_select] 動的カラムが作成されない不具合を修正しました。レコードにマッチしない場合に発生していました。

- [reindex] reindexコマンドの実行によりデータが失われてしまう不具合を修正しました。

- [httpd] 別のユーザーでワーカーを動かしている時、 quit と shutdown のレスポンスが壊れている問題を修正しました。 [GitHub ranguba/groonga-client#12]

## 7.0.1リリース - 2017-03-29

### 改良

- 以下のAPIを公開しました。

  - grn_ii_cursor_next_pos()
  - grn_table_apply_expr()
  - grn_obj_is_data_column()
  - grn_obj_is_expr()
  - grn_obj_is_scalar_column()

- [column_copy] 参照型のベクタのダンプをサポートしました。

- [load] `array<object>` スタイルの重み付きベクターカラムのloadをサポートしました。 `array<object>` の例: `[{"key1": weight1}, {"key2": weight2}]`

- インデックスを使った `!(XXX OPERATOR VALUE)` の検索をサポートしました。演算子として `>` だけでなく、 `>=`、 `<`、 `<=`、 `==` や `!=` も使えます。

- インデックスを使って `!(column == CONSTANT)` を検索できるようになりました。例えば `!(column == 29)` などです。

- `!` の最適化を以下のパターンでサポートしました。

  - `!(column @ "X") && (column @ "Y")`
  - `(column @ "Y") && !(column @ "X")`
  - `(column @ "Y") &! !(column @ "X")`

- `XXX || !(column @ "xxx")` をインデックスを使って検索できるようになりました。

- [dump] `'{"x": 1, "y": 2}'` というスタイルを参照されていない重み付きベクターカラムで使うようにしました。この変更は古いGroongaには影響しません。もともとサポートされているからです。

- [実験的] `GRN_ORDER_BY_ESTIMATED_SIZE_ENABLE` 環境変数をサポートしました。この変数はクエリの最適化を予想されるヒット件数に応じて行うかどうかを切り替えるのに使用します。この機能はデフォルトでは無効です。有効にするには `GRN_ORDER_BY_ESTIMATED_SIZE_ENABLE=yes` を指定します。

- [select] `columns` や `drilldown` の評価結果をクエリログに追加するようにしました。

- [select] `drilldown` のクエリログのフォーマットを変更しました。これは非互換な変更ですが、クエリログを変換するようなプログラムを独自に開発しているユーザー以外には影響ありません。

- [table_remove] 一時的なメモリ使用量を削減しました。スレッドの最大数が0のときに有効になります。

- [select] `columns[LABEL](N)` がクエリログのフォーマットとして使われます。以前は `columns(N)[LABEL]` でした。

- [クエリ拡張] ベクターカラムを使った推奨例に更新しました。[ぐるなびさんが報告]

- ロック中にリクエストがキャンセルされたことを検出できるようにしました。これは `request_cancel` がロック中に意図せず無視されないようにします。

- [logical_select] `initial` および `filtered` 動的カラムをサポートしました。使用例は `--columns[LABEL].stage initial` や `--columns[LABEL].stage filtered` です。

- [logical_select] `match_columns` や `query` 、 `drilldown_filter` オプションをサポートしました。

- [highlight_html] 類似文書検索をサポートしました。

- [logical_select] `initial` および `filtered` 動的カラムをサポートしました。使用例は `--columns[LABEL].stage initial` や `--columns[LABEL].stage filtered` です。

- [logical_select] 動的カラムでウィンドウ関数をサポートしました。

- [select] 動的カラムに関するドキュメントを追加しました。

- [ウィンドウ関数] ウィンドウ関数のセクションをドキュメントに追加しました。

- [CentOS] EOLのため、CentOS 5のサポートをやめました。

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

- ANDでのマッチ最適化を環境変数で無効化できるようにしました。この機能は `GRN_TABLE_SELECT_AND_MIN_SKIP_ENABLE=no` を設定することで無効化できます。デフォルトでは有効になっています。

- [vector_new] 新規ベクターを作成するための関数を追加しました。

- [select] `drilldown_filter` のドキュメントを追加しました。

### 修正

- [lock_clear] テンポラリデータベースに対して実行するとクラッシュする不具合を修正しました。

- 自然言語に対する動的インデックス更新でインデックスサイズが肥大化する問題を修正しました。Groonga 6.1.4から発生していました。

- [select] "A && B.C @ X" というクエリでマッチすべきレコードを返さないことがある不具合を修正しました。

- `grn_io_flush()` と `grn_io_expire()` がコンフリクトする問題を修正しました。この修正がないと、 `io_flush` と `load` が同時に特定のタイミングで実行されるとクラッシュする不具合がありました。

- [logical_table_remove] 最大スレッド数が1のときにクラッシュする不具合を修正しました。

### 感謝

- 株式会社ぐるなびさん

## 7.0.0リリース - 2017-02-09

### 改良

- [in_values] 参照型ベクターカラムのシーケンシャルサーチに対応しました。 [GitHub#629] [村上さんがパッチ提供]

- [select] 誤った `drilldown[LABEL].sort_keys` が指定されたとき、無視するのではなく、エラーを報告するようにしました。

- [select] DBのメタデータを不必要に更新しないようにしました。 `select` コマンドを使っているだけなのにDBにロックがかかったままになってしまうのを防ぎます。

- [lock_clear] `lock_clear` でDBのメタデータに対するロックも削除できるようにしました。

- [CentOS] GroongaをAmazon LinuxでもインストールできるようにEPELをデフォルトで有効にするようにしました。

- [query] `default_mode` オプションで "@X" スタイルのエイリアスが使えるようになりました。

- [query] 動作モードのリストに関するドキュメントを更新しました。動作モードの既定値は `MATCH` ("@") で全文検索を実行します。

- [rpm][centos] CentOS 7で groonga-token-filter-stem パッケージを提供するようにしました。 ステミングに対応するための `TokenFilterStem` トークンフィルターを提供します。　[GitHub#633] [Tim Bellefleurさんが報告]

- [window_record_number] `record_number` が非推奨になりました。代わりに `window_record_number` を使ってください。 `record_number` は互換性のためだけに残っています。

- [window_sum] `window_sum` ウィンドウ関数を追加しました。PostgreSQLのsum()と同様のウィンドウ関数を提供します。

- `TABLE_DAT_KEY` テーブルをインメモリで使ったときに静的インデックス構築をできるようにしました。 [GitHub#623] [村上さんが報告]

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

- `columns[LABEL].window.group_keys` をサポートしました。ウィンドウ関数をグループごとに提供することができます。

- [load] 誤ったキーが指定されていたときにエラーを報告するようにしました。キーの型が異なっている場合でも気付けるようになります。

- [load] `--output_errors yes` オプションをサポートしました。"yes"を指定すると、どのレコードのloadに失敗したのかエラーを取得できるようになります。この機能を使う場合には、コマンドバージョン3を指定します。

- [load] キーのキャストに失敗したときのエラーメッセージをわかりやすくしました。以前は単に "cast failed" と表示していましたが、テーブルのキーの型とキャスト対象となるキーの型もメッセージに含まれるようになりました。

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

### 修正

- 存在しないソートキーを `drilldowns[LABEL]` や `slices[LABEL]` に指定するとJSONパースエラーとなる不具合を修正しました。 [GitHub#627] [村上さんがパッチ提供]

- 存在しないグループのサブレコードにアクセスしようとするとクラッシュする不具合を修正しました。例えば、 `drilldowns[LABEL].sort_keys _sum` を `calc_types` の指定なしに使っていた場合に問題が発生していました。 [GitHub#625] [村上さんがパッチ提供]

- tokenizerでエラーが発生するとクラッシュする不具合を修正しました。tokenizer と token filterを登録していて、tokenizer にエラーがあると発生していました。

- [window_record_number] ウィンドウ関数の引数が正しく渡されていない不具合を修正しました。 [GitHub#634] [村上さんがパッチ提供]

### 感謝

- 村上さん

- aomi-nさん

## 古いリリース

- News - 6.x
  - 6.1.5リリース - 2017-01-23
  - 6.1.4リリース - 2017-01-18
  - 6.1.3リリース - 2017-01-06
  - 6.1.2リリース - 2016-12-31
  - 6.1.1リリース - 2016-11-29
  - 6.1.0リリース - 2016-10-29
  - 6.0.9リリース - 2016-09-29
  - 6.0.8リリース - 2016-08-29
  - 6.0.7リリース - 2016-07-29
  - 6.0.5リリース - 2016-06-29
  - 6.0.4リリース - 2016-06-06
  - 6.0.3リリース - 2016-05-29
  - 6.0.2リリース - 2016-04-29
  - 6.0.1リリース - 2016-03-29
  - 6.0.0リリース - 2016-02-29
- News - 5.x
  - 5.1.2リリース - 2016-01-29
  - 5.1.1リリース - 2015-12-29
  - 5.1.0リリース - 2015-11-29
  - 5.0.9リリース - 2015-10-29
  - 5.0.8リリース - 2015-09-29
  - 5.0.7リリース - 2015-08-31
  - 5.0.6リリース - 2015-07-29
  - 5.0.5リリース - 2015-06-29
  - 5.0.4リリース - 2015-05-29
  - 5.0.3リリース - 2015-04-29
  - 5.0.2リリース - 2015-03-31
  - 5.0.1リリース - 2015-03-29
  - 5.0.0リリース - 2015-02-09
- News - 4.x
  - 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
- News - 3.x
  - 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
- News - 2.x
  - 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
- News - 1.3.x
  - 1.3.0リリース - 2012-01-29
- News - 1.2.x
  - 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