お知らせ - 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 and NormalizerNFKC150のように複数のノーマライザーを使っている。

    • 空白を含む文字列をハイライトする。

    例えば、以下のようなケースでこの問題は発生します。

    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は、WGS84GetPointUInt64(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を並列に実行できるようになりました。

    この機能は、loadinput_typeapache-arrowの時のみ有効です。

    この機能は、一つのカラムに対し一つのスレッドを割り当てます。対象のカラムがたくさんある時に、ロード時間の短縮が期待できます。

  • [select] --filter内で配列リテラルをなるべく、uvectorとして使えるようにしました。

    uvectorは、要素が固定長サイズのベクターです。

    すべての要素の型が同じ場合、ベクターの変わりにuvactorを使えます。

  • [status] statusの結果にn_workersを追加しました。

  • 動的カラムの作成を最適化しました。

  • [WAL] 壊れたインデックスの再構築を並列で実行できるようになりました。

  • [select] output_type=apache-arrowの時に、_keyInt64型のテーブルへの参照カラムを表示できるようにしました。

修正#

  • [Windows] Windows向けパッケージ内のgroonga-normalizer-mysqlのドキュメントのパスを修正しました。

    今回のリリースから、groonga-normalizer-mysqlのドキュメントはshare/以下に格納されます。

  • [select] ビットごとの演算を行うとGroongaがクラッシュすることがある問題を修正しました。