参照ベクターカラムの静的なインデックス構築をサポートしました。例えば、 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 など)を指定できるようになりました。
[plugin] grn_command_input_get_arguments() を追加しました。
shardingプラグインを更新しました。
[logical_select] 出力フォーマットを select との互換フォーマットになるように修正しました。
[logical_select] 以下のパラメーターをサポートしました。
[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][サーバーパッケージ][ログローテート] ログファイルにオーナー・グループを設定するのをやめました。理由は、一貫性がないためです。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さん
データベースを開くときにファイルが存在しなかった場合などに、正しいエラー情報を表示するようにしました。
ライブラリーとして使うときに、デフォルトのロガーのパスを設定しないようにしました。
これは後方互換性のない変更ですが、ほとんどのユーザーには影響がありません。
サーバーとして使うとき(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さん
[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さん
[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] 以下のオプションを追加しました。
[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を追加しました。
[実験的] ログローテーションをサポートしました。この機能はデフォルトでは無効です。以下のオプションで有効にできます。
[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.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などの環境で問題が解消される。
篠田さん
畑ケさん
[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さんが提案]
スコア関数のカスタマイズをサポートしました。詳細は Scorer を参照してください。
[非互換] スコア関数の導入により、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_II_CURSOR_SET_MIN_ENABLE 環境変数を 1 にします。デフォルトでは無効です。
[doc] in_values のドキュメントを追加しました。
logical_count のドキュメントを追加しました。
[mruby] #inspect メソッドを実装しました。デバッグに有用です。
スコアラー scorer_tf_at_most のドキュメントを追加しました。出現頻度が高くても、指定したスコアの閾値を越えないようにします。
[mruby] マッチする件数を推定してインデックスを使って検索するかシーケンシャルに検索するかを選択できるようにしました。
インデックスを使ってサイズを推定するための関数を追加しました。
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になりました!
[実験的] シャーディングするためのプラグインを追加しました。有効にするには 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さん