お知らせ - 14系#
14.0.2リリース - 2024-03-29#
改良#
一時テーブルに対して、normalizers/tokenizer/token_filtersを設定したときに出力されるログのログレベルを下げました。
例えば、この変更の対象のログは以下のようなログです。
DDL:1234567890:set_normalizers NormalizerAuto
PGroongaは起動時に一時テーブルに対してノーマライザーを設定するため、このログがノイズになっていました。このログのログレベルは
notice
なので、PGroonga起動時にこのログが出力されてしまうためです。そのため、今回のリリースからこのようなログのログレベルを
debug
にしました。これにより、デフォルトでは、PGroonga起動時にこのログが出力されないようになります。
14.0.1リリース - 2024-03-14#
改良#
[load] ノーマライズによって空のキーとなったキーを
load
する時のエラーを止めました。"-"
は、NormalizerNFKC150("remove_symbol", true)
によって""
になります。そのため、以下のケースでは"empty key"エラーが報告されます。table_create Values TABLE_HASH_KEY ShortText \ --normalizers 'NormalizerNFKC150("remove_symbol", true)' table_create Data TABLE_NO_KEY column_create Data value COLUMN_SCALAR Values load --table Data [ {"value": "-"} ]
しかし、このようなデータを大量に
load
した場合、多くのエラーログが生成されます。Groongaは空の文字列をインデックスに登録できないため、"empty key"エラーを大量に出力するためです。ただ、このようなケースで空の文字列がインデックスへ登録できなくても問題ありません。空の文字列で検索しても何も一致しないためです。そのため、このようなケースの時に"empty key"エラーを報告するのを止めました。
修正#
between または、範囲検索時にリクエストキャンセルするとGroongaがクラッシュする問題を修正しました。
この問題は必ず発生するわけではありません。特定のタイミングでリクエストキャンセルをすると発生します。シーケンシャルサーチなどの検索時間が長い場合に発生しやすいです。
以下の条件を満たした時に highlight_html が正しくない結果を返すことがあります。
NormalizerTable
andNormalizerNFKC150
のように複数のノーマライザーを使っている。空白を含む文字列をハイライトする。
例えば、以下のようなケースでこの問題は発生します。
table_create NormalizationsIndex TABLE_PAT_KEY ShortText --normalizer NormalizerAuto table_create Normalizations TABLE_HASH_KEY UInt64 column_create Normalizations normalized COLUMN_SCALAR LongText column_create Normalizations target COLUMN_SCALAR NormalizationsIndex column_create NormalizationsIndex index COLUMN_INDEX Normalizations target table_create Lexicon TABLE_PAT_KEY ShortText \ --normalizers 'NormalizerTable("normalized", \ "Normalizations.normalized", \ "target", \ "target"), NormalizerNFKC150' table_create Names TABLE_HASH_KEY UInt64 column_create Names name COLUMN_SCALAR Lexicon load --table Names [ ["_key","name"], [1,"Sato Toshio"] ] select Names \ --query '_key:1 OR name._key:@"Toshio"' \ --output_columns 'highlight_html(name._key, Lexicon) [ [ 0, 1710401574.332274, 0.001911401748657227 ], [ [ [ 1 ], [ [ "highlight_html", null ] ], [ "sato <span class=\"keyword\">toshi</span>o" ] ] ] ]
[Ubuntu] Ubuntu向けパッケージを提供できるようになりました。
Groonga 14.0.0では、GroongaのUbuntu向けパッケージを提供していませんでした。Ubuntu向けパッケージのビルド環境の問題で、パッケージを作るのに失敗したためです。
14.0.1でこの問題を修正したので、今回のリリースからGroongaのUbuntu向けパッケージを提供できるようになりました。
clang
を使ってソースからビルドした時にビルドエラーになる問題を修正しました。 [GitHub#1738][Reported by windymelt]
感謝#
windymeltさん
14.0.0リリース - 2024-02-29#
メジャーバージョンアップです! メジャーバージョンアップですが、互換性は壊れていないので、データベースを再構築することなく14.0.0へアップグレードできます。
改良#
新しいトークナイザー
TokenH3Index
を追加しました。(実験的)TokenH3Index
は、WGS84GetPoint
をUInt64
(H3 index)に変換します。非テキストベースのトークナイザーを使ったインデックスのオンライン構築とオフライン構築をサポートしました。(実験的)
TokenH3Index
は、非テキストベースのトークナイザーの一つです。[select] 非テキストベースのトークナイザーを使ったインデックスでの検索をサポートしました。(実験的).
TokenH3Index
は、非テキストベースのトークナイザーの一つです。新しい関数
distance_cosine()
,distance_inner_product()
,distance_l2_norm_squared()
,distance_l1_norm()
を追加しました。これらの関数と
limit N
を使うことで、ベクトル的に距離の近いレコードのみを取得することができます。これらの関数は、
output
ステージで距離を計算します。ただ、これらの関数はまだ最適化できていません。
distance_cosine()
: コサイン類似度を計算します。distance_inner_product()
: 内積を計算します。distance_l2_norm_squared()
: ユークリッド距離を計算します。distance_l1_norm()
: マンハッタン距離を計算します。
新しい関数
number_round()
を追加しました。[load]
load
を並列に実行できるようになりました。この機能は、
load
のinput_type
がapache-arrow
の時のみ有効です。この機能は、一つのカラムに対し一つのスレッドを割り当てます。対象のカラムがたくさんある時に、ロード時間の短縮が期待できます。
[select]
--filter
内で配列リテラルをなるべく、uvectorとして使えるようにしました。uvectorは、要素が固定長サイズのベクターです。
すべての要素の型が同じ場合、ベクターの変わりにuvactorを使えます。
[status]
status
の結果にn_workers
を追加しました。動的カラムの作成を最適化しました。
[WAL] 壊れたインデックスの再構築を並列で実行できるようになりました。
[select]
output_type=apache-arrow
の時に、_key
がInt64
型のテーブルへの参照カラムを表示できるようにしました。
修正#
[Windows] Windows向けパッケージ内の
groonga-normalizer-mysql
のドキュメントのパスを修正しました。今回のリリースから、
groonga-normalizer-mysql
のドキュメントはshare/
以下に格納されます。[select] ビットごとの演算を行うとGroongaがクラッシュすることがある問題を修正しました。