BloGroonga

2017-12-29

Groonga 7.1.0リリース

今日は肉の日ですね!

Groonga 7.1.0をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

主な変更点は以下の通りです。

  • load のクエリーログのフォーマットを改良しました。

  • logical_count のクエリーログのフォーマットを改良しました。

  • logical_select のクエリーログのフォーマットを改良しました。

  • delete のクエリーログのフォーマットを改良しました。

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

  • grn_bulk_*() APIにおいて、 realloc() が呼ばれる回数を削減しました。

  • 関数 index_column_source_records を新規に追加しました。インデックスカラムのソースを取得することができます。

load のクエリーログのフォーマットを改良しました。

loadのクエリーログに以下の情報が表示されるようになります。

  • ロードしたレコード数
  • ロードがエラーになったレコードとカラムの数
  • 総レコード数

具体的には、以下のように表示されます。

2017-12-29 15:23:47.049299|0x7ffe8af29a50|:000000001209848 load(3): [1][2][3]
2017-12-29 15:23:47.049311|0x7ffe8af29a50|<000000001221494 rc=-22

load直後の()の中の数字は、ロードしたレコード数、1番目の[]の中の数字は、ロードに失敗したレコード数、2番目の[]の中の数字はロードに失敗したカラム数、3番目の[]の中の数字は、総レコード数を表します。

logical_count のクエリーログのフォーマットを改良しました

logical_countのクエリーログに以下の情報が表示されるようになります。

  • 検索にマッチしたレコード数

具体的には、以下のように表示されます。

2017-12-29 15:25:06.068077|0x7fffedde8460|:000000001276405 count(2)
2017-12-29 15:25:06.068107|0x7fffedde8460|<000000001305264 rc=0

count直後の()の中の数字が、検索にマッチしたレコード数を表します。

logical_select のクエリーログのフォーマットを改良しました

logical_select のクエリーログに以下の情報が表示されるようになります。

  • 検索にマッチしたレコード数
  • ドリルダウンした数
  • ラベルつきのドリルダウンをした数

具体的には、以下のように表示されます。

2017-12-29 15:19:53.703472|0x7ffe0ce4e650|:000000001372833 filter(1)
2017-12-29 15:19:53.703499|0x7ffe0ce4e650|:000000001397623 select(1)[Logs_20170315]
2017-12-29 15:19:53.703796|0x7ffe0ce4e650|:000000001695440 filter(2)
2017-12-29 15:19:53.703813|0x7ffe0ce4e650|:000000001711123 select(2)[Logs_20170316]
2017-12-29 15:19:53.704024|0x7ffe0ce4e650|:000000001923225 filter(2)
2017-12-29 15:19:53.704040|0x7ffe0ce4e650|:000000001937931 select(2)[Logs_20170317]
2017-12-29 15:19:53.704198|0x7ffe0ce4e650|:000000002096788 output(5)
2017-12-29 15:19:53.704354|0x7ffe0ce4e650|<000000002253133 rc=0

select直後の()の中の数字は、実行されるクエリーによって、検索にマッチしたレコード数、ドリルダウン結果のレコード数、ラベル付きドリルダウンした結果のレコード数を表します。 また、シャード毎に結果を表示するようになっています。 上記例では、3つのシャードが存在するので、selectが3つ出力されています。 末尾の[]は、検索したテーブル名が表示されます。

delete のクエリーログのフォーマットを改良しました

delete のクエリーログに以下の情報が表示されるようになります。

  • 削除したレコード数と削除に失敗したレコード数
  • 削除後に残ったレコード数

具体的には、以下のように表示されます。

2017-12-29 15:27:30.002184|0x7fff769b2340|:000000032051813 delete(2): [0][1]
2017-12-29 15:27:30.002196|0x7fff769b2340|<000000032062599 rc=0

delete直後の()の中の数字は、削除した件数、1番目の[]の中の数字は、削除に失敗した件数、2番目の[]の中の数字は、deleteコマンドを実行した結果、残ったレコード数を表します。

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

ベクター型のカラムに対して、ドリルダウンできるようになります。

以下のように drilldown_calc_target にベクターカラムを指定して、ベクターカラムの要素の中で 最小の値や最大の値、合計値、平均値等を出力できるようになっています。

table_create Tags TABLE_PAT_KEY ShortText

table_create Memos TABLE_HASH_KEY ShortText
column_create Memos tag COLUMN_SCALAR Tags
column_create Memos scores COLUMN_VECTOR Int64

load --table Memos
[
{"_key": "Groonga1", "tag": "Groonga", "scores": [10, 29]},
{"_key": "Groonga2", "tag": "Groonga", "scores": [20]},
{"_key": "Groonga3", "tag": "Groonga", "scores": [60, 71]},
{"_key": "Mroonga1", "tag": "Mroonga", "scores": [61, 62, 63]},
{"_key": "Mroonga2", "tag": "Mroonga", "scores": [24, 20, 16]},
{"_key": "Mroonga3", "tag": "Mroonga", "scores": [8, 5, 2]},
{"_key": "Rroonga1", "tag": "Rroonga", "scores": [3]},
{"_key": "Rroonga2", "tag": "Rroonga", "scores": [-9, 0, 9]},
{"_key": "Rroonga3", "tag": "Rroonga", "scores": [0]}
]

上記のようなテーブルに対して、以下のクエリーを発行すると、tagGroongaを持つレコード、tagMroongaを持つレコード、tagRroongaを持つレコードのscoresカラムの中から最小値、最大値、scoresカラムの各要素を合計した値、scoresカラムの要素の平均値を計算し出力します。

select Memos \
  --limit 0 \
  --drilldowns[tag].keys tag \
  --drilldowns[tag].calc_types 'MAX, MIN, SUM, AVG' \
  --drilldowns[tag].calc_target scores \
  --drilldowns[tag].output_columns _key,_max,_min,_sum,_avg

したがって、上記のクエリーの結果はそれぞれ以下のようになります。(説明に不要な部分は一部割愛して記載しています。) 左から_key, _max_min_sum_avgの値となります。

["Groonga", 71, 10, 190, 38.0],
["Mroonga", 63, 2, 261, 29.0],
["Rroonga", 9, -1, 3, 0.6],

grn_bulk_*() APIにおいて、 realloc() が呼ばれる回数を削減しました。

クエリーの実行結果表示の際に、応答サイズが大きいとWindows版のみ表示速度が遅くなる現象を改善しました。 この変更によって、Windows版においてクエリーの実行結果表示のパフォーマンスが向上します。 例えば、出力が100MBを超える場合には、約100倍速くなります。

関数 index_column_source_records を新規に追加しました

この関数を使って、以下のようにインデックスカラムのソースを取得することができます。

plugin_register functions/index_column

table_create Memos TABLE_HASH_KEY ShortText

table_create Terms TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenBigram \
  --normalizer NormalizerAuto
column_create Terms index COLUMN_INDEX|WITH_POSITION Memos _key

load --table Memos
[
{"_key": "Groonga is a fast full text search engine."},
{"_key": "Mroonga is a MySQL storage engine based on Groonga."},
{"_key": "Rroonga is a Ruby bindings for Groonga."}
]

上記のようなテーブルに対して、以下のクエリーを発行すると、Termsテーブルに登録されているトークンが出現するレコードを表示できます。

select Terms \
  --limit -1 \
  --sort_keys _id \
  --columns[index_records].stage output \
  --columns[index_records].type Memos \
  --columns[index_records].flags COLUMN_VECTOR \
  --columns[index_records].value 'index_column_source_records("index")' \
  --output_columns '_id, _key, index_records'

上記のクエリーの結果はそれぞれ以下のようになります。(説明に不要な部分は一部割愛して記載しています。) 一番右の値が、index_column_source_recordsの結果となります。

[ 1, "groonga", [ "Groonga is a fast full text search engine.", "Mroonga is a MySQL storage engine based on Groonga.", "Rroonga is a Ruby bindings for Groonga." ] ],
[ 2, "is", [ "Groonga is a fast full text search engine.", "Mroonga is a MySQL storage engine based on Groonga.", "Rroonga is a Ruby bindings for Groonga." ] ],
(省略)

さいごに

7.0.9からの詳細な変更点は7.1.0リリース 2017-12-29を確認してください。

それでは、Groongaでガンガン検索してください!