お知らせ - 15系 — Groonga v16.0.8ドキュメント

本文へスキップ
`Ctrl`+`K`

# お知らせ - 15系

## 15.2.5リリース - 2026-01-30

### 修正

#### `ShortBinary`、`Binary`、`LongBinary`、`JSON`型の互換性バグを修正しました。

15.1.8リリース - 2025-10-31で`ShortBinary`、`Binary`、`LongBinary`型が、15.2.3リリース - 2026-01-15で`JSON`型が追加されましたが、そのバージョン以前に作成したデータベースでそれらの型が使えなかった不具合を修正しました。

また15.2.1リリース - 2025-12-02以前のGroongaで作ったデータベースを、15.2.3リリース - 2026-01-15以降のGroongaで開き、schema コマンドを実行するとクラッシュする不具合も修正しました。

15.2.1以前のGroongaを使っている環境でバージョンアップをする場合は、15.2.5以降のバージョンにバージョンアップするようにしてください。

既に15.2.3, 15.2.4へバージョンアップしている場合であっても、15.2.5へバージョンアップすることで、この問題を修正できます。

## 15.2.4リリース - 2026-01-29

### 改良

#### [grndb] `grndb check` で使用したオブジェクトを即時閉じるように改良

これにより、メモリ消費を抑制できます。

今までは、使用したオブジェクトをメモリー上に開いたままにしていました。大きなデータベースをチェックする際に多くのメモリーを必要とします。そのため、メモリーの少ない環境では`grndb check`の完了に長い時間がかかり実用的ではありませんでした。

今回の変更によって、メモリーの少ない環境でも、現実的な時間で`grndb check`が完了するようになります。

## 15.2.3リリース - 2026-01-15

### 修正

#### `centroid_column`を使った時に、インデックス構築の後に追加したレコードが見つからない問題を修正しました。

このバグが発生すると、以下のようにGroongaは追加したレコードを返しません。

    plugin_register language_model/knn

    table_create Data TABLE_NO_KEY
    column_create Data text COLUMN_SCALAR ShortText
    column_create Data rabitq_code COLUMN_SCALAR ShortBinary

    load --table Data
    [
    {"text": "I am a boy."}
    ]

    table_create RaBitQ TABLE_HASH_KEY UInt32 \
      --default_tokenizer \
        'TokenLanguageModelKNN("model", "hf:///groonga/multilingual-e5-base-Q4_K_M-GGUF", \
                               "centroid_column", "centroid", \
                               "code_column", "rabitq_code", \
                               "passage_prefix", "passage: ", \
                               "query_prefix", "query: ")'
    column_create RaBitQ centroid COLUMN_VECTOR Float32
    column_create RaBitQ data_text COLUMN_INDEX Data text

    load --table Data
    [
    {"text": "This is an apple."}
    ]

    select Data \
      --filter 'language_model_knn(text, "fruit")' \
      --output_columns text
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            1
          ],
          [
            [
              "text",
              "ShortText"
            ]
          ],
          [
            "I am a boy."
          ]
        ]
      ]
    ]

### 実験的な機能

> これらの機能はまだ実験的で安定していません。これらの機能は、絶対に実運用環境では使わないでください。

#### OpenZLをバンドル

OpenZLは高い圧縮率と速度を提供する圧縮フレームワークです。

`column_create`に`COMPRESS_OPENZL`を指定することができますが、まだ圧縮や解凍の機能を実装していないため、これを指定しても何もしません。

#### JSON型をサポート

いくつかのデータ型に対して、`load`と`dump`ができますが、その他の機能はまだ実装していません。

## 15.2.1リリース - 2025-12-02

### 改良

#### [column_create] インデックス構築のプログレスログをサポート

プログレスログは静的インデックス構築のときに出力されます。

デフォルトのログレベルは`debug`です。そのため、プログレスログを見るためにはすべてのデバッグログも出力する必要があります。ログレベルに`notice`を使うと、他のデバッグログなしでプログレスログを確認できます。

#### [TokenLanguageModelKNN] `centroid_column`オプションをサポート

このオプションは、1025次元（4100バイト）以上の大きなエンベディング向けです。Groongaのテーブルキーは4KiB以下でなければなりません。4KiBを超えるエンベディングはキーとして保存できません。

このオプションを使うと、大きなエンベディングをテーブルのキーではなく指定したカラムに保存します。以下のように、エンべディングを保存するためのカラムを指定し、インデックス用のテーブルにそれを追加します。

    table_create LargeCentroids TABLE_HASH_KEY UInt32 \
      --default_tokenizer \
          'TokenLanguageModelKNN("model", "hf:///groonga/multilingual-e5-base-Q4_K_M-GGUF", \
                                 "centroid_column", "centroid", \
                                 "code_column", "embedding_code", \
                                 "passage_prefix", "passage: ", \
                                 "query_prefix", "query: ")'
    column_create LargeCentroids centroid COLUMN_VECTOR Float32
    column_create LargeCentroids data_content COLUMN_INDEX Memos content

#### [TokenLanguageModelKNN] `n_gpu_layers`オプションをサポート

言語モデルが利用するGPUレイヤー数を指定します。省略すると、可能な限りのGPUを使用します。

多くの場合、明示的にこのオプションを設定する必要はありません。

`n_gpu_layers`に`0`を設定することで、GPUを無効にすることができます。

#### [language_model_knn] `k`オプションをサポート

返すレコード数を指定します。このオプションを設定しない場合、返すレコード数の上限は`10`になります。

負の値を指定することもできます。負の値の場合は、最大で"マッチしたレコード数 + k + 1"件のレコードを出力するという意味になります。例えば、`"{ "k" : -1 }"`はすべてのレコードを出力します。これはすべてのレコードを表示する場合にとても便利です。

### 修正

#### `TABLE_PAT_KEY`テーブルのキーでオーバーフローを引き起こす問題を修正しました。

この問題は、PGroongaのpgroonga/pgroonga#901で発見されたものです。サイズの大きな値（トークナイズ後のトークンが4096byteになるような値）を持つカラムに対して静的インデックス構築を行った場合、インデックスが破損する可能性があります。

lilydjwgさんの報告。

### 感謝

- lilydjwgさん

## 15.2.0リリース - 2025-11-10

このリリースでは、ビルドに失敗する問題を解決しPPA(Personal Package Archive)で提供しているUbuntu向けパッケージを再度提供しました。

### 修正

[Ubuntu] PPA (Personal Package Archive) で提供しているUbuntu向けのパッケージを再度提供

Launchpadでのビルド失敗が原因で、Groonga 15.1.8と15.1.9ではPPA(Personal Package Archive)で提供しているUbuntu向けパッケージを提供できていませんでした。

今回のリリースで、ビルドが失敗する問題を解決し、再度パッケージを提供しました。

## 15.1.9リリース - 2025-11-05

今回のリリースでは、ベクトル化の並列処理をサポートしました。

### 改良

#### ベクトル化の並列処理をサポート

language_model_knn や TokenLanguageModelKNN や language_model_vectorize で並列にベクトル化できるようになりました。

`--n-default-workers=-1`をセットすると、GroongaはCPUのコア数以下のスレッドで並列実行します。ただ、この設定はCPU数をベースにするため最適ではありません。

最適なワーカー数にするにはCPU使用率ではなく、GPU使用率を確認する必要があります。

#### [TokenLanguageModelKNN] プレフィックスをサポート

multilingual-e5 のようないくつかのモデルは、検索対象のテキストや検索クエリーのテキストにプレフィックスを要求します。この改良はこれらのケースをサポートします。

- `passage_prefix`は、検索対象のテキストのプレフィックスです。

- `query_prefix`は、検索クエリーのテキストのプレフィックスです。

例えば以下のように、検索対象のテキストのプレフィックスに`passage:` を、検索クエリーのテキストのプレフィックスに`query:` を設定できます。

    TokenLanguageModelKNN("model", "hf:///groonga/multilingual-e5-base-Q4_K_M-GGUF", \
                          "code_column", "rabitq_code", \
                          "passage_prefix", "passage: ", \
                          "query_prefix", "query: ")

## 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`、`LongBinary`を追加

この機能はまだ実験的で安定していません。

## 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アルファベットのサポートを追加

GH-2539

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を使ってビルド] ビルド・インストール方法を修正

GH-2479

かつべさんがパッチ提供

ドキュメントの`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をサポート

GH-2211

TABLE_PAT_KEYは高速な検索のために内部では数値キーをエンコード・デコードしています。そのため、TABLE_PAT_KEYはキーをどのようにエンコード・デコードするかを知らなければいけません。TABLE_PAT_KEYはこのリリースまではFloat32をどのようにエンコード・デコードすればよいかを知りませんでした。今回のリリースから、TABLE_PAT_KEYはFloat32をエンコード・デコードできるようになりました。そのため、Float32を他のInt32やFloatのような数値型のようにTABLE_PAT_KEYのキーとして使えるようになりました。