Groonga 10.0.5リリース
Groonga 10.0.5をリリースしました!
それぞれの環境毎のインストール方法: インストール
変更内容
主な変更点は以下の通りです。
-
select
--load_table
で指定したテーブルに参照を格納できるようにしました。 -
select ソートのパフォーマンスを改善しました。
-
select 以下のケースのパフォーマンスを少し改善しました。
- 沢山のレコードがマッチする検索をしているケース。
- 沢山のレコードに対してドリルダウンするケース。
-
[aggregator] score アクセサーをサポートしました。
-
インデックス構築 VC++版の静的インデックス構築のパフォーマンスを改善しました。
-
select JSON形式で出力する際に
NaN
やInfinity
、-Infinity
の代わりにnull
を出力するようにしました。- これらの値はJSONではサポートされていないためです。
-
select 標準偏差の集計をサポートしました。
-
[Windows] Visual Studio 2013のサポートをやめました。
-
Groonga HTTPサーバー 応答がエラーで中断された時に、
shutdown?immediate
を実行しても、リクエストが中断しない問題を修正しました。 -
リクエスト中にエラーが発生した時にクラッシュする問題を修正しました。
- これは、Apache Arrow形式を使っている時にのみ発生します。
- 前のリクエストがエラーによって中断された後に再度Groongaへリクエストを送信した時にGroongaがクラッシュします。
-
between 一時テーブルを使用した時にクラッシュする問題を修正しました。
- 例えば、
between
の第一引数に動的カラムを指定すると、Groongaがクラッシュしていました。
- 例えば、
-
プラグインで作成したプロシージャーが予期せず解放される問題を修正しました。
- 参照カウントモードでのみ発生します。
plugin_register
を使っていない場合は、発生しません。plugin_register
を実行したプロセスでは発生しません。plugin_register
を実行していないプロセスで発生します。
-
token_column
を使った静的インデックス構築中に正規化エラーが発生する問題を修正しました。
select --load_table
で指定したテーブルに参照を格納できるようにしました。
-
--load-table
は予め用意したテーブルに検索結果を格納する機能です。- 複数回検索が実行される場合、このテーブルに結果を格納することで、検索結果をキャッシュできます。
- このテーブルを使うことで、初回以降の検索時間を短縮できます。
-
今回のリリース以降で、以下のようにこのテーブルに別のテーブルへの参照を格納できます。
- カラムの値を格納せず、参照のみを格納するため、このテーブルのサイズを小さくすることができます。
-
このテーブルに対して検索する場合、参照先のテーブルのインデックスを使って検索できます。
table_create Logs TABLE_HASH_KEY ShortText column_create Logs timestamp COLUMN_SCALAR Time table_create Times TABLE_PAT_KEY Time column_create Times logs_timestamp COLUMN_INDEX Logs timestamp table_create LoadedLogs TABLE_HASH_KEY Logs load --table Logs [ { "_key": "2015-02-03:1", "timestamp": "2015-02-03 10:49:00" }, { "_key": "2015-02-03:2", "timestamp": "2015-02-03 12:49:00" }, { "_key": "2015-02-04:1", "timestamp": "2015-02-04 00:00:00" } ] select \ Logs \ --load_table LoadedLogs \ --load_columns "_key" \ --load_values "_key" \ --limit 0 select \ --table LoadedLogs \ --filter 'timestamp >= "2015-02-03 12:49:00"' [ [ 0, 0.0, 0.0 ], [ [ [ 2 ], [ [ "_id", "UInt32" ], [ "_key", "ShortText" ], [ "timestamp", "Time" ] ], [ 2, "2015-02-03:2", 1422935340.0 ], [ 3, "2015-02-04:1", 1422975600.0 ] ] ] ]
select ソートのパフォーマンスを改善しました。
-
以下のケースのソートのパフォーマンスを改善しました。
-
多くのソートキーがID解決をする場合。
-
例えば、以下の式はIDを解決する必要があります。
--filter true --sort_keys column
-
例えば、以下の式はIDを解決する必要がありません。 擬似カラム
_score
は、結果テーブルに存在しており、ソーステーブルには存在しないためIDを解決する必要がありません。--filter true --sort_keys _score
-
-
ソート対象のテーブルがキーを持っている場合。
- したがって、
TABLE_NO_KEY
はこの改善をサポートしていません。
- したがって、
-
[aggregator] score アクセサーをサポートしました。
-
例えば、 以下のように
_score
をaggregator_*
の対象にできます。table_create Items TABLE_HASH_KEY ShortText column_create Items price COLUMN_SCALAR UInt32 column_create Items tag COLUMN_SCALAR ShortText load --table Items [ {"_key": "Book", "price": 1000, "tag": "A"}, {"_key": "Note", "price": 1000, "tag": "B"}, {"_key": "Box", "price": 500, "tag": "B"}, {"_key": "Pen", "price": 500, "tag": "A"}, {"_key": "Food", "price": 500, "tag": "C"}, {"_key": "Drink", "price": 300, "tag": "B"} ] select Items \ --filter true \ --drilldowns[tag].keys tag \ --drilldowns[tag].output_columns _key,_nsubrecs,score_mean \ --drilldowns[tag].columns[score_mean].stage group \ --drilldowns[tag].columns[score_mean].type Float \ --drilldowns[tag].columns[score_mean].flags COLUMN_SCALAR \ --drilldowns[tag].columns[score_mean].value 'aggregator_mean(_score)' [ [ 0, 0.0, 0.0 ], [ [ [ 6 ], [ [ "_id", "UInt32" ], [ "_key", "ShortText" ], [ "price", "UInt32" ], [ "tag", "ShortText" ] ], [ 1, "Book", 1000, "A" ], [ 2, "Note", 1000, "B" ], [ 3, "Box", 500, "B" ], [ 4, "Pen", 500, "A" ], [ 5, "Food", 500, "C" ], [ 6, "Drink", 300, "B" ] ], { "tag": [ [ 3 ], [ [ "_key", "ShortText" ], [ "_nsubrecs", "Int32" ], [ "score_mean", "Float" ] ], [ "A", 2, 1.0 ], [ "B", 3, 1.0 ], [ "C", 1, 1.0 ] ] } ] ]
select 標準偏差の集計をサポートしました。
-
例えば、以下のようにグループごとの標準偏差を計算できます。
table_create Items TABLE_HASH_KEY ShortText column_create Items price COLUMN_SCALAR UInt32 column_create Items tag COLUMN_SCALAR ShortText load --table Items [ {"_key": "Book", "price": 1000, "tag": "A"}, {"_key": "Note", "price": 1000, "tag": "B"}, {"_key": "Box", "price": 500, "tag": "B"}, {"_key": "Pen", "price": 500, "tag": "A"}, {"_key": "Food", "price": 500, "tag": "C"}, {"_key": "Drink", "price": 300, "tag": "B"} ] select Items \ --drilldowns[tag].keys tag \ --drilldowns[tag].output_columns _key,_nsubrecs,price_sd \ --drilldowns[tag].columns[price_sd].stage group \ --drilldowns[tag].columns[price_sd].type Float \ --drilldowns[tag].columns[price_sd].flags COLUMN_SCALAR \ --drilldowns[tag].columns[price_sd].value 'aggregator_sd(price)' \ --output_pretty yes [ [ 0, 1594339851.924836, 0.002813816070556641 ], [ [ [ 6 ], [ [ "_id", "UInt32" ], [ "_key", "ShortText" ], [ "price", "UInt32" ], [ "tag", "ShortText" ] ], [ 1, "Book", 1000, "A" ], [ 2, "Note",p 1000, "B" ], [ 3, "Box", 500, "B" ], [ 4, "Pen", 500, "A" ], [ 5, "Food", 500, "C" ], [ 6, "Drink", 300, "B" ] ], { "tag": [ [ 3 ], [ [ "_key", "ShortText" ], [ "_nsubrecs", "Int32" ], [ "price_sd", "Float" ] ], [ "A", 2, 250.0 ], [ "B", 3, 294.3920288775949 ], [ "C", 1, 0.0 ] ] } ] ]
aggregate_sd(target, {"unbiased": true})
と指定することで、不偏標準偏差も計算できます。
さいごに
それでは、Groongaでガンガン検索してください!