お知らせ - 15系#
15.1.7リリース - 2025-09-29#
今回のリリースでは、NormalizerNFKC
で日本語の踊り字を正規化できるようになりました。また、AlmaLinux 10でインストール失敗していた問題を修正しました。
改良#
[grndb] 大きなデータベースファイルに対するエラー処理を改善#
これまで、grndb
はファイルシステムのstat上限(例:Windows環境で2GBを超えるファイル)を超えるデータベースファイルを処理すると異常終了していました。今回のリリースでは、grndb
がGroongaのデータベースディレクトリ(db本体および関連するdb.*ファイル)内でそのようなファイルを処理した場合、問題のある各ファイルについてエラーを記録しつつ、異常終了せず最後まで継続するように改善しました。
[unify_iteration_mark] unify_iteration_mark
オプションで踊り字をサポート#
unify_iteration_mark
オプションを利用することで、次の踊り字をサポートします。これらの踊り字は直前の1文字を繰り返すものとして扱われます。
Hiragana Iteration Mark ゝ (U+309D)
Hiragana Voiced Iteration Mark ゞ (U+309E)
Katakana Iteration Mark ヽ (U+30FD)
Katakana Voiced Iteration Mark ヾ (U+30FE)
Ideographic Iteration Mark 々 (U+3005) - 制限: 直前の単一文字の繰り返しのみサポート
Vertical Ideographic Iteration Mark 〻 (U+303B) - 制限: 直前の単一文字の繰り返しのみサポート
unify_iteration_mark
オプションの使用例
normalize \
'NormalizerNFKC("unify_iteration_mark", true)' \
"こゝろ"
[
[
0,
1758763896.821301,
0.0001749992370605469
],
{
"normalized": "こころ",
"types": [
],
"checks": [
]
}
]
注釈
々 と 〻 については、直前の1文字のみを繰り返すケースのみに限ります。 次のような「直前1文字の繰り返し」を以外のパターンは 非対応 です。
例
"部分々々" -> "部分部分"
"古々々米" -> "古古古米"
利用可能なコマンド一覧を取得する新コマンドを追加#
利用可能なGroongaの全コマンドを一覧で返す新しいcommand_list
コマンドを追加しました。現時点では、各コマンドについてIDと名前のみを返します。このコマンドを利用することで、クライアントライブラリAPIの自動生成や、Groonga MCP(Model Context Protocol)サーバーの実装を支援できます。将来のリリースでは、コマンドの概要、説明、引数の詳細情報などを出力に含める予定です。
command_list
[
[
0,
1758764636.669152,
0.0002362728118896484
],
{
"cache_limit": {
"id": 150,
"name": "cache_limit"
},
...
}
]
[TokenFilterStem] 非ASCIIアルファベットのサポートを追加#
Tsai, Xing Weiさんが報告
これまでTokenFilterStem
フィルターは、ASCIIアルファベットのみに対応していました。今回の変更により、アラビア語などの非ASCIIアルファベットでもステミングをサポートします。
以下はアラビア語テキストでTokenFilterStem
を使用する例です。
table_create Terms TABLE_PAT_KEY ShortText \
--default_tokenizer TokenNgram \
--normalizer 'NormalizerNFKC("version", "16.0.0")' \
--token_filters 'TokenFilterStem("algorithm", "arabic")'
table_tokenize Terms "الكتاب مفيد" --mode ADD
[
[
0,
0.0,
0.0
],
[
{
"value": "كتاب",
"position": 0,
"force_prefix": false,
"force_prefix_search": false
},
{
"value": "مفيد",
"position": 1,
"force_prefix": false,
"force_prefix_search": false
}
]
]
修正#
[AlmaLinux] AlmaLinux 10でインストールが失敗する問題を修正#
groonga-releaseに含まれていた古いRPM GPGキーが原因で、dnf
のGPGチェックエラーに失敗してインストールできない場合がありました。古いキーを削除し、RSA4096キーのみを配布するようにしたため、現在は期待どおりにインストールできます。
$ dnf install -y --enablerepo=epel --enablerepo=crb groonga
...
error: Certificate 72A7496B45499429:
Policy rejects 72A7496B45499429: No binding signature at time 2025-09-24T09:35:25Z
Key import failed (code 2). Failing package is: groonga-15.1.5-1.el10.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-34839225, file:///etc/pki/rpm-gpg/RPM-GPG-KEY-45499429
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: GPG check FAILED
どのユーザーがアップグレードすべきですか?#
ほとんどのユーザーはアップグレードの必要はありません。アップグレードの必要があるのは、AlmaLinux 10で2025/09/24以前にgroonga-releaseをインストールしたユーザーのみです。AlmaLinux 10でも2025/09/24以降にgroonga-releaseをインストールした場合は対応は不要です。
$ sudo dnf upgrade --refresh groonga-release
アップグレード後に、groonga-release
に新しいキーのみが含まれていることを次のように確認できます。
$ dnf repoquery -l --installed groonga-release
/etc/pki/rpm-gpg
/etc/pki/rpm-gpg/RPM-GPG-KEY-34839225
/etc/yum.repos.d
/etc/yum.repos.d/groonga-almalinux.repo
/etc/yum.repos.d/groonga-amazon-linux.repo
感謝#
Tsai, Xing Weiさん
15.1.5リリース - 2025-08-29#
今回のリリースでは、TABLE_PAT_KEY
テーブルでKEY_LARGE
フラグをサポートしました!
Debian 13 "Trixie" が2025-08-09にリリースされました。GroongaはすでにDebian 13で使えます! ぜひ試してみてください!
改良#
[table_create] TABLE_PAT_KEY
でKEY_LARGE
フラグをサポート#
TABLE_HASH_KEY
テーブルと同様に、TABLE_PAT_KEY
テーブルでも KEY_LARGE
フラグを使用して、最大合計キーサイズを4GiBから1TiBに拡張できるようになりました。これにより、より多くのキーを保存できるようになります。
table_create LargePaths TABLE_PAT_KEY|KEY_LARGE ShortText
[NormalizerNFKC] unify_hyphen_and_prolonged_sound_mark
とremove_symbol
の組み合わせをサポート#
以前は、unify_hyphen_and_prolonged_sound_mark
とremove_symbol
の両方のオプションを同時に有効にした場合、ハイフン記号が期待通りに削除されませんでした。なぜなら、ハイフン記号が削除されるシンボルとして適切に扱われていなかったためです。
このリリースでこの問題を修正し、両方のオプションが有効な場合に次のようにハイフン記号が取り除かれるようになりました。
normalize \
'NormalizerNFKC("remove_symbol", true, \
"unify_hyphen_and_prolonged_sound_mark", true)' \
"090ー1234-5678"
[
[
0,
1756363926.409565,
0.0003023147583007812
],
{
"normalized": "09012345678",
"types": [
],
"checks": [
]
}
]
[AlmaLinux] AlmaLinux 10をサポート#
AlmaLinux 10用のパッケージが利用可能になりました。標準的なパッケージインストール方法でAlmaLinux 10にGroongaをインストールできます。
修正#
[その他: CMakeを使ってビルド] ビルド・インストール方法を修正#
かつべさんがパッチ提供
ドキュメントのcmake --build
とcmake --install
コマンドに誤った-B
オプションが記載されており、実際に実行した際にビルドエラーの原因となっていました。
正しいコマンドは次のとおりです。
cmake --build <Build directory path>
cmake --install <Build directory path>
[truncate] truncate
コマンド実行後に KEY_LARGE
フラグが失われる不具合を修正#
この問題により、KEY_LARGE
フラグが設定されたTABLE_HASH_KEY
テーブルに対してtruncate
コマンドを実行すると、KEY_LARGE
フラグがトランケート時に削除されてしまうため、テーブルは合計で4 GiBを超えるキーを保持できなくなっていました。
[grndb] grndb check
コマンドによるデータベースのチェックが不十分だった問題を修正#
grndb check
コマンドが一部のデータベースファイルをチェックしていませんでした。
ただ、この修正が入る前でも grndb check
によるテーブルとカラムのチェックは正しい結果を返します。 この修正によって、データベースのチェックも正しい結果を返せるようになります。
感謝#
かつべさん
15.1.4リリース - 2025-07-29#
今回のリリースでは、*ONPP
演算子のフレーズ間の距離の計算の間違いを修正しました。
修正#
[順序付き近傍フレーズ直積検索] フレーズ間の距離の計算の間違いを修正しました#
この問題は、 *ONPP-1,0,10"(abc bcd) (defg)"
のように *ONPP
と MAX_ELEMENT_INTERVAL
を指定して使っている時に発生することがあります。 MAX_ELEMENT_INTERVAL
を使ってない場合は、この問題は発生しません。
*ONPP
の構文や使い方については以下のリンクを参照してください。
[
*ONPP
のクエリー構文] 順序付き近傍フレーズ直積検索条件[
*ONPP
のスクリプト構文] 順序付き近傍フレーズ直積検索演算子
この問題が発生すると、以下のようなことが起こる可能性があります。
ヒットしないはずのレコードを返すことがあります。
ヒットするはずのレコードを返さないことがあります。
15.1.3リリース - 2025-07-18#
改良#
[Apache Arrow] Apache Arrow C++ 21.0.0 をサポートしました#
15.1.2リリース - 2025-07-07#
改良#
[Windows] Visual Studio 2019 でビルドしたパッケージのサポートをやめました#
このリリースから以下のパッケージは提供しなくなります。
groonga-xx.x.x-x64-vs2019.zip
groonga-xx.x.x-x64-vs2019-with-vcruntime.zip
修正#
[近傍フレーズ検索] フレーズ間の距離の計算の間違いを修正しました#
この問題は、以下のように*NP
や *NPP
、 *ONP
を MAX_ELEMENT_INTERVAL
を指定して使っている時に発生することがあります。
*NP-1,0,12"abc ef"
*NPP-1,0,10"(abc bcd) (ef)"
*ONP-1,0,5|6 "abc defghi jklmnop"
MAX_ELEMENT_INTERVAL
を使ってない場合は、この問題は発生しません。
*NP
や *NPP
、 *ONP
の構文や使い方については以下のリンクを参照してください。
[
*NP
のクエリー構文] 近傍フレーズ検索条件[
*NP
のスクリプト構文] 近傍フレーズ検索演算子[
*NPP
のクエリー構文] 近傍フレーズ直積検索条件[
*NPP
のスクリプト構文] 近傍フレーズ直積検索演算子[
*ONP
のクエリー構文] 順序付き近傍フレーズ検索条件[
*ONP
のスクリプト構文] 順序付き近傍フレーズ検索演算子
この問題が発生すると、以下のようなことが起こる可能性があります。
ヒットしないはずのレコードを返すことがあります。
ヒットするはずのレコードを返さないことがあります。
15.1.1リリース - 2025-06-02#
このリリースでは、TokenMecabがスペースを含むユーザー定義エントリを単一トークンとして保持できるようにする変更をおこないました。
改良#
TokenMecab: スペースを含むユーザー定義エントリの意図しないトークン分割を修正#
従来、TokenMecabはスペースを含むユーザー定義エントリ(例: "search engine")を"search"や"engine"のように別々のトークンとして分割していました。本リリースではこの問題を修正し、スペースを含むエントリを"search engine"のように単一のトークンとしてトークナイズできるように修正しました。
tokenize TokenMecab "search engine" --output_pretty yes
[
[
0,
1748413131.972704,
0.0003032684326171875
],
[
{
"value": "search engine",
"position": 0,
"force_prefix": false,
"force_prefix_search": false
}
]
]
修正#
ドキュメント内の複数の誤記を修正#
GH-2332、GH-2333、GH-2334、GH-2335、GH-2336、GH-2337、GH-2338
Vasilii Lakhinさんがパッチ提供。
感謝#
Vasilii Lakhinさん
15.0.9リリース - 2025-05-08#
このリリースでは、トークナイザのオプションを追加してトークンの確認を簡単にするとともに、符号なし整数を負の数で除算したときのセマンティクスを改善しました。
改良#
tokenize/table_tokenize: output_styleオプションの追加#
output_styleオプションをtokenize/table_tokenizeコマンドに追加しました。これにより、トークンの属性情報を表示する必要がない場合に、トークン情報のみを表示できます。
以下は output_styleオプション使用例です。
tokenize TokenNgram "Fulltext Search" --output_style simple
[
[
0,
1746573056.540744,
0.0007045269012451172
],
[
"Fu",
"ul",
"ll",
"lt",
"te",
"ex",
"xt",
"t ",
" S",
"Se",
"ea",
"ar",
"rc",
"ch",
"h"
]
]
X / 負の整数
のセマンティクスを明確にした#
これまでは、符号なし整数X
を-1
または-1.0
で割った場合のみ-X
を返すようにしていました。今回のリリース以降は任意の負の整数で割った際にも数学的に期待される負の結果を返すようになります。
変更前:
X / -2
は必ずしも-(X / 2)
を返すとは限りませんでした。変更後:
X / -2
は常に-(X / 2)
を返すようになります。
これは後方非互換な変更ですが、この挙動に依存しているユーザーはいないはずです。
15.0.4リリース - 2025-03-29#
改良#
X / -1
とX / -1.0
のセマンティクスを明確にした#
多くの言語ではX / -1
とX / -1.0
は-X
を返します。しかし、GroongaはX
が非負整数のときは-X
を返さないことがありました。
このリリースからはX / -1
とX / -1.0
は常に-X
を返します。
これは後方非互換な変更ですが、この挙動に依存しているユーザーはいないはずです。
15.0.3リリース - 2025-03-10#
改良#
静的なインデックス構築方法: 語彙表がTABLE_HASH_KEYの場合でも並列構築をサポート#
並列静的インデックス構築は内部的にすべての単語をソートして処理しています。TABLE_PAT_KEYとTABLE_PAT_KEYは効率よくこの処理をできます。なぜなら、これらはツリーベースだからです。しかし、TABLE_HASH_KEYは効率よくこの処理をすることができません。なぜならツリーベースではないからです。そのため、語彙表がTABLE_HASH_KEYの場合は並列静的インデックス構築をサポートしていませんでした。
このリリースでは語彙表がTABLE_HASH_KEYの場合でも並列静的インデックス構築を使えるようにしました。これは通常の方法で単語をソートしています。そのため、それほど効率的ではありません。語彙表がTABLE_HASH_KEYの場合の並列静的インデックス構築は語彙表がTABLE_PAT_KEYまたはTABLE_DAT_KEYの場合より遅いでしょう。しかし、語彙表がTABLE_HASH_KEYで直列に静的インデックス構築をするよりも速い可能性があります。
15.0.2リリース - 2025-02-21#
修正#
静的なインデックス構築方法: 並列に構築するとオプションを無視することがある問題を修正#
静的なインデックス構築を並列で実行しているときにGroongaがノーマライザー、トークナイザー、トークンフィルターのオプションを無視することがある問題を修正しました。
次の場合に発生することがあります。
NormalizerTable を使っていてこの問題が発生した場合、静的なインデックス構築は失敗します。 NormalizerTable には必須の引数がありますが、オプションが無視されると必須の引数が指定されていないことになるためです。
15.0.1リリース - 2025-02-20#
改良#
[Ubuntu] Ubuntu 20.04 (Focal Fossa) のサポート終了#
Ubuntu 20.04は2025年5月にサポート終了(EOL)となるため、今回のリリースからサポートを終了しました。
15.0.0リリース - 2025-02-09#
毎年恒例の肉の日メジャーリリースです!このリリースには後方互換性が壊れる変更はありません!既存のデータベースを移行せずにGroongaをアップグレードできます。既存のデータベースをそのまま使い続けることができます。
改良#
TABLE_PAT_KEY: キーの型としてFloat32をサポート#
TABLE_PAT_KEYは高速な検索のために内部では数値キーをエンコード・デコードしています。そのため、TABLE_PAT_KEYはキーをどのようにエンコード・デコードするかを知らなければいけません。TABLE_PAT_KEYはこのリリースまではFloat32をどのようにエンコード・デコードすればよいかを知りませんでした。今回のリリースから、TABLE_PAT_KEYはFloat32をエンコード・デコードできるようになりました。そのため、Float32を他のInt32やFloatのような数値型のようにTABLE_PAT_KEYのキーとして使えるようになりました。