Groonga 13.1.0リリース
Groonga 13.1.0をリリースしました!
それぞれの環境毎のインストール方法: インストール
変更内容
主な変更点は以下の通りです。
改良
-
[select] トレースログもキャッシュするようにしました。
-
Apache Arrow フォーマットの応答で
dict<string>
の出力をサポートしました。 -
[Groonga HTTPサーバー] 新しい content type
application/vnd.apache.arrow.stream
をサポートしました。 -
[query] 以下のような空の入力をサポートしました。
table_create Users TABLE_NO_KEY column_create Users name COLUMN_SCALAR ShortText table_create Lexicon TABLE_HASH_KEY ShortText --default_tokenizer TokenBigramSplitSymbolAlphaDigit --normalizer NormalizerAuto column_create Lexicon users_name COLUMN_INDEX|WITH_POSITION Users name load --table Users [ {"name": "Alice"}, {"name": "Alisa"}, {"name": "Bob"} ] select Users --output_columns name,_score --filter 'query("name", " ")' [ [ 0, 0.0, 0.0 ], [ [ [ 0 ], [ [ "name", "ShortText" ], [ "_score", "Int32" ] ] ] ] ]
-
BFloat16をサポートしました。(実験的)
BFloat16のloadとselectができるだけです。
bfloat16_value - 1.2
のような算術演算はできません。 -
[column_create] 新しいフラグ WEIGHT_BFLOAT16 を追加しました。
修正
-
[select] Groonga が
output_pretty=yes
の結果をキャッシュした場合、output_pretty
をつけていないクエリーであっても、output_pretty
をつけて返してしまう問題を修正しました。 -
誤ったデータを作り出してしまう問題を修正しました。
通常、ユーザーはこれを明示的に実行できません。 数値の動的カラムや一時結果セットが作られたとき、あるいは使われているとき、かつ クエリーに
OR
を使っている場合に内部的に発生することがあります。例えば、以下のクエリーで誤ったデータを作り出すことがあります。
select TABLE \ --match_columns TEXT_COLUMN \ --query 'A B OR C' \ --columns[NUMERIC_DYNAMIC_COLUMN].stage result_set \ --columns[NUMERIC_DYNAMIC_COLUMN].type Float32 \ --columns[NUMERIC_DYNAMIC_COLUMN].flags COLUMN_VECTOR
もしこの問題が起こった場合は、
NUMERIC_DYNAMIC_COLUMN
は多くのごみ要素を含んでいます。そして、それは多くのメモリー消費の原因にもなります。この問題はスタック上の未初期化の変数が原因です。そのため、発生するかもしれないし、しないかもしれないことに注意してください。
-
有効な
normalizers/token_filters
の設定が失敗することがある問題を修正しました。 -
[fuzzy_search] 以下の3つの条件が成立した時にクラッシュする問題を修正しました。
-
クエリーが2つまたはそれ以上のマルチバイト文字を持っている場合。
-
${ASCII}${ASCII}${MULTIBYTE}*
という形の文字列がパトリシアトライのテーブルにある場合。 -
WITH_TRANSPOSITION
が有効な場合。
例えば、以下のようにパトリシアトライのテーブル内にある"aaあ"とクエリー"あiう"のペアは問題を起こします。
table_create Users TABLE_NO_KEY column_create Users name COLUMN_SCALAR ShortText table_create Names TABLE_PAT_KEY ShortText column_create Names user COLUMN_INDEX Users name load --table Users [ {"name": "aaあ"}, {"name": "あうi"}, {"name": "あう"}, {"name": "あi"}, {"name": "iう"} ] select Users \ --filter 'fuzzy_search(name, "あiう", {"with_transposition": true, "max_distance": 3})' \ --output_columns 'name, _score' \ --match_escalation_threshold -1
-