こんにちは、堀本です。 肉の日ですね。Groonga 9.0.1をリリースしました! http://groonga.org/ja/blog/2019/03/29/groonga-9.0.1.html 変更点一覧: http://groonga.org/ja/docs/news.html#release-9-0-1 主な変更点は以下の通りです。 * [select] 新しい引数 "--load_table"、 "--load_columns"、 "--load_values" を追加しました。 * 壊れたインデックスをチェックする "index_column_diff" コマンド を追加しました。(この機能は検証中です) * インデックスが正常に更新されないことによって、削除したレコードが マッチすることがあるバグを修正しました。 * 大量のレコードを追加や削除した時に発生することがあります。 * "logical_range_filter" がレコードを返さない時のメモリリークを 修正しました。 * ロードしたデータが正しくノーマライズされない事によって、クエリーに マッチしなくなるバグを修正しました。 * このバグは、カタカナの後ろに空白を含むデータをロードし、 ノーマライザーに "unify_kana" オプションを使用していると発生します。 * インデックスの更新中にインデックスが破損するバグを修正しました。 * 大量のレコードを長期間、繰り返し追加、または削除していると発生する ことがあります。 * インデックスを更新する際、作業領域が十分ではなくクラッシュするバグを 修正しました。 ### [select] 新しい引数 "--load_table"、 "--load_columns"、 "--load_values" を追加しました。 "select" の結果を "--load_table" で指定したテーブルへ格納できます。 引数の説明は以下の通りです。 * "--load_table" オプション: "select" の結果を格納するテーブルを 指定します。 * "--load_values" オプション: "select" の結果のカラムを指定します。 * "--load_columns" オプション: "--load_table" で指定したテーブルの カラムを指定します。 このようにして、"--load_values" で指定したカラムの値を、 "--load_columns" で指定したカラムへ格納できます。 例えば以下のように、 "--load_table" で指定したLogsテーブルに "select" の結果の"_id" と "timestamp" を格納できます。 ``` table_create Logs_20150203 TABLE_HASH_KEY ShortText column_create Logs_20150203 timestamp COLUMN_SCALAR Time table_create Logs TABLE_HASH_KEY ShortText column_create Logs original_id COLUMN_SCALAR UInt32 column_create Logs timestamp_text COLUMN_SCALAR ShortText load --table Logs_20150203 [ { "_key": "2015-02-03:1", "timestamp": "2015-02-03 10:49:00" }, { "_key": "2015-02-03:2", "timestamp": "2015-02-03 12:49:00" } ] select \ --table Logs_20150203 \ --load_table Logs \ --load_columns "original_id, timestamp_text" \ --load_values "_id, timestamp" [ [ 0, 0.0, 0.0 ], [ [ [ 2 ], [ [ "_id", "UInt32" ], [ "_key", "ShortText" ], [ "timestamp", "Time" ] ], [ 1, "2015-02-03:1", 1422928140.0 ], [ 2, "2015-02-03:2", 1422935340.0 ] ] ] ] select --table Logs [ [ 0, 0.0, 0.0 ], [ [ [ 2 ], [ [ "_id", "UInt32" ], [ "_key", "ShortText" ], [ "original_id", "UInt32" ], [ "timestamp_text", "ShortText" ] ], [ 1, "2015-02-03:1", 1, "1422928140000000" ], [ 2, "2015-02-03:2", 2, "1422935340000000" ] ] ] ] ``` ### 壊れたインデックスをチェックする "index_column_diff" コマンドを 追加しました。(この機能は検証中です) この機能は、まだ検証中ですが、このコマンドを使ってインデックスの破損 をチェックできます。 このコマンドは、インデックスカラムの値と、インデックスのソースを トークナイズした値を比較し、差分を表示します。 このコマンドは以下のように使用します。 * 第一引数に、対象のインデックスカラムを含むインデックステーブルの 名前を指定します。 * 第二引数に、対象のインデックスカラムを指定します。 ``` index_column_diff index_table_name index_column_name ``` このコマンドの結果は、以下のように3つの項目があります。 * "token" : この項目は、破損したトークンを表します。 * "remains" : この項目は、意図せずインデックスに残っている ポスティングリストを表します。 * "missings" : この項目は、意図せずインデックスから削除された ポスティングリストを表します。 インデックスが正常な場合は、この項目は以下のように空の値を返します。 ``` index_column_diff --table Term --name data_index [[0,1553654816.796513,0.001804113388061523],[]] ```