こんばんは。堀本です。
Groonga 12.0.0 をリリースしました!
https://groonga.org/ja/docs/news.html#release-12-0-0
メジャーバージョンアップです!
メジャーバージョンアップですが、互換性を壊すような変更は入っていないので
データベースを再構築することなく12.0.0へアップグレードできます。
変更点一覧:
https://groonga.org/ja/blog/2022/02/09/groonga-12.0.0.html
## 主な変更内容
### 改良
* [sub_filter] 新しいオプション pre_filter_threshold を追加しました。
このオプションで、 GRN_SUB_FILTER_PRE_FILTER_THRESHOLD の値を変更できます。
Groongaが sub_filter 実行時に レコード数が GRN_SUB_FILTER_PRE_FILTER_THRESHOLD 以下だった場合、
Groongaは既に絞り込んだレコードに対して sub_filter を実行します。
-1にすると、常にこの最適化を有効にできます。
* [index_column_have_source_record] 新しい関数 index_column_have_source_record() を追加しました。
インデックスに存在するトークンがGroongaに登録されているいずれかのレコードに含まれているかどうかを確認できます。
Groongaは、レコードの更新によってどのレコードからも使われていないトークンがあっても、それを削除しません。
したがって、例えば、オートコンプリート機能を使っていると、検索候補としてどのレコードにも含まれていないトークンを返す
可能性がありますが、この関数をつかうことで、不要なトークンを返さないようにできます。
この関数は、トークンがどのレコードにも含まれていないことを検出できるからです。
* [NormalizerNFKC130] 新しいオプション strip を追加しました。
このオプションは、以下のように先頭と末尾から空白を削除します。
normalize \
'NormalizerNFKC121("strip", true, \
"report_source_offset", true)' \
" hello world\t! \t " \
WITH_CHECKS|WITH_TYPES
[
[
0,
0.0,
0.0
],
{
"normalized": "hello world!",
"types": [
"alpha",
"alpha",
"alpha",
"alpha",
"alpha",
"others",
"alpha",
"alpha",
"alpha",
"alpha",
"alpha|blank",
"symbol|blank"
],
"checks": [
3,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2
],
"offsets": [
0,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
14
]
}
]
* [select] 新しい引数 drilldown_max_n_target_records と drilldown[${LABEL}].max_n_target_records を追加しました。
ドリルダウン対象のテーブル(フィルター結果)の中のうち最大で何レコードをドリルダウンに使うかを指定します。
もし、フィルター結果のレコード数が指定した値より大きかったらフィルターした結果内のいくつかのレコードはドリルダウンには使われません。
これらの引数のデフォルト値は、 -1 です。これらの引数に -1 がセットされた場合、Groongaは全てのレコードをドリルダウンに使います。
この機能はフィルター結果が非常に大きくなるかもしれない場合に有用です。
大きなフィルター結果に対するドリルダウンは遅くなることがあるためです。この機能を使うことでドリルダウンに使うレコード数を制限できます。
以下はドリルダウンに使う最大レコード数を制限する例です。
最後の2レコード( {"_id": 4, "tag": "Senna"} と {"_id": 5, "tag": "Senna"} )は使われていません。
table_create Entries TABLE_HASH_KEY ShortText
column_create Entries content COLUMN_SCALAR Text
column_create Entries n_likes COLUMN_SCALAR UInt32
column_create Entries tag COLUMN_SCALAR ShortText
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
column_create Terms entries_key_index COLUMN_INDEX|WITH_POSITION Entries _key
column_create Terms entries_content_index COLUMN_INDEX|WITH_POSITION Entries content
load --table Entries
[
{"_key": "The first post!",
"content": "Welcome! This is my first post!",
"n_likes": 5,
"tag": "Hello"},
{"_key": "Groonga",
"content": "I started to use Groonga. It's very fast!",
"n_likes": 10,
"tag": "Groonga"},
{"_key": "Mroonga",
"content": "I also started to use Mroonga. It's also very fast! Really fast!",
"n_likes": 15,
"tag": "Groonga"},
{"_key": "Good-bye Senna",
"content": "I migrated all Senna system!",
"n_likes": 3,
"tag": "Senna"},
{"_key": "Good-bye Tritonn",
"content": "I also migrated all Tritonn system!",
"n_likes": 3,
"tag": "Senna"}
]
select Entries \
--limit -1 \
--output_columns _id,tag \
--drilldown tag \
--drilldown_max_n_target_records 3
[
[
0,
1337566253.89858,
0.000355720520019531
],
[
[
[
5
],
[
[
"_id",
"UInt32"
],
[
"tag",
"ShortText"
]
],
[
1,
"Hello"
],
[
2,
"Groonga"
],
[
3,
"Groonga"
],
[
4,
"Senna"
],
[
5,
"Senna"
]
],
[
[
2
],
[
[
"_key",
"ShortText"
],
[
"_nsubrecs",
"Int32"
]
],
[
"Hello",
1
],
[
"Groonga",
2
]
]
]
]
* [httpd] バンドルしているnginxのバージョンを1.21.6に更新しました。