お知らせ - 15系#
15.1.8リリース - 2025-10-31#
今回のリリースでは、セマンティックサーチができるようになりました。
改良#
[status] .["features"]["faiss"]エントリーを追加#
.["features"]エントリーは次のように各機能が有効かどうかを示しています。
[
["..."],
{
"...": "...",
"features": {
"nfkc": true,
"mecab": true,
"...": "..."
},
"...": "..."
}
]
このリリースは.["features"]エントリーにfaissを追加しました。
[
["..."],
{
"...": "...",
"features": {
"nfkc": true,
"mecab": true,
"...": "...",
"faiss": true,
"...": "..."
},
"...": "..."
}
]
Faissが有効になっているかどうかを確認するために.["features"]["faiss"]を使うことができます。
次で紹介するセマンティックサーチを使うためにはFaissサポートが必要です。
セマンティックサーチが使えるようになりました。#
この機能はまだ実験的で安定していません。
TokenLanguageModelKNNトークナイザーと、language_model_knn関数を追加しました。これらを合わせて使うことでセマンティックサーチができます。
セマンティックサーチをしている例は次のとおりです。
select Data \
--filter 'language_model_knn(text, "male child")' \
--output_columns text
[
[
0,
0.0,
0.0
],
[
[
[
3
],
[
[
"text",
"ShortText"
]
],
[
"I am a boy."
],
[
"This is an apple."
],
[
"Groonga is a full text search engine."
]
]
]
]
キーワード検索と同様にテキストで検索しているところがポイントです。内部的にはGroongaがエンベディングを生成し、それを使ってセマンティックサーチを実現しています。
ユーザーが自分でエンべディングを作成し、それを使って検索する必要はありません。キーワード検索と同じようにテキストで検索できます。
具体例の記載は割愛しましたが、これは検索対象のテキストをロードするときも同様です。これまでと同じようにテキストをGroongaにロードするだけで、セマンティックサーチができるようになります。ユーザーがエンべディングを作成し、それをロードする必要はありません。Groongaが自動でエンベディングの生成も行うためです。
インデックスの設定方法など、詳しくはTokenLanguageModelKNNトークナイザーと、language_model_knn関数のページをご覧ください。
[language_model_vectorize] 言語モデルの自動ダウンロードをサポート#
この機能はまだ実験的で安定していません。
次のようにmodel_nameにHugging Face URIを指定すると自動でモデルのダウンロードをします。初回の実行にダウンロードをして、Groongaのデータベースディレクトリに配置します。その後の実行ではローカルのモデルを利用します。
language_model_vectorize("hf:///groonga/all-MiniLM-L6-v2-Q4_K_M-GGUF", content)
この機能を活用するとGroongaがダウンロードと配置をやってくれるので便利です。
[データ型] ShortBinary、Binary、LargeBinaryを追加#
この機能はまだ実験的で安定していません。
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のキーとして使えるようになりました。