BloGroonga

2023-12-26

Groonga 13.1.0リリース

Groonga 13.1.0をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

主な変更点は以下の通りです。

改良

  • [select] トレースログもキャッシュするようにしました。

  • Apache Arrow フォーマットの応答で dict<string> の出力をサポートしました。

  • [Groonga HTTPサーバー] 新しい content type application/vnd.apache.arrow.stream をサポートしました。

  • [query] 以下のような空の入力をサポートしました。

    table_create Users TABLE_NO_KEY
    column_create Users name COLUMN_SCALAR ShortText
    
    table_create Lexicon TABLE_HASH_KEY ShortText   --default_tokenizer TokenBigramSplitSymbolAlphaDigit   --normalizer NormalizerAuto
    column_create Lexicon users_name COLUMN_INDEX|WITH_POSITION Users name
    load --table Users
    [
    {"name": "Alice"},
    {"name": "Alisa"},
    {"name": "Bob"}
    ]
    
    select Users   --output_columns name,_score   --filter 'query("name", "  	")'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            0
          ],
          [
            [
              "name",
              "ShortText"
            ],
            [
              "_score",
              "Int32"
            ]
          ]
        ]
      ]
    ]
    
  • BFloat16をサポートしました。(実験的)

    BFloat16のloadとselectができるだけです。 bfloat16_value - 1.2 のような算術演算はできません。

  • [column_create] 新しいフラグ WEIGHT_BFLOAT16 を追加しました。

修正

  • [select] Groonga が output_pretty=yes の結果をキャッシュした場合、 output_pretty をつけていないクエリーであっても、 output_pretty をつけて返してしまう問題を修正しました。

  • 誤ったデータを作り出してしまう問題を修正しました。

    通常、ユーザーはこれを明示的に実行できません。 数値の動的カラムや一時結果セットが作られたとき、あるいは使われているとき、かつ クエリーに OR を使っている場合に内部的に発生することがあります。

    例えば、以下のクエリーで誤ったデータを作り出すことがあります。

    select TABLE \
      --match_columns TEXT_COLUMN \
      --query 'A B OR C' \
      --columns[NUMERIC_DYNAMIC_COLUMN].stage result_set \
      --columns[NUMERIC_DYNAMIC_COLUMN].type Float32 \
      --columns[NUMERIC_DYNAMIC_COLUMN].flags COLUMN_VECTOR
    

    もしこの問題が起こった場合は、 NUMERIC_DYNAMIC_COLUMN は多くのごみ要素を含んでいます。そして、それは多くのメモリー消費の原因にもなります。

    この問題はスタック上の未初期化の変数が原因です。そのため、発生するかもしれないし、しないかもしれないことに注意してください。

  • 有効な normalizers/token_filters の設定が失敗することがある問題を修正しました。

  • [fuzzy_search] 以下の3つの条件が成立した時にクラッシュする問題を修正しました。

    1. クエリーが2つまたはそれ以上のマルチバイト文字を持っている場合。

    2. ${ASCII}${ASCII}${MULTIBYTE}* という形の文字列がパトリシアトライのテーブルにある場合。

    3. WITH_TRANSPOSITION が有効な場合。

    例えば、以下のようにパトリシアトライのテーブル内にある"aaあ"とクエリー"あiう"のペアは問題を起こします。

    table_create Users TABLE_NO_KEY
    column_create Users name COLUMN_SCALAR ShortText
    
    table_create Names TABLE_PAT_KEY ShortText
    column_create Names user COLUMN_INDEX Users name
    load --table Users
    [
    {"name": "aaあ"},
    {"name": "あうi"},
    {"name": "あう"},
    {"name": "あi"},
    {"name": "iう"}
    ]
    select Users \
      --filter 'fuzzy_search(name, "あiう", {"with_transposition": true, "max_distance": 3})' \
      --output_columns 'name, _score' \
      --match_escalation_threshold -1