BloGroonga

2024-07-04

Groonga 14.0.5リリース

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

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

変更内容

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

改良

  • 可能な限りオブジェクト(テーブルやカラム)を削除する機能を追加しました。

    この機能は主にPGroongaのクラッシュセーフ機能で使います。

    PGroongaはCustom WAL Resource Managersを使うことで、PGroongaのWALをスタンバイへ自動で適用できるようになります。 ただ、Custom WAL Resource Managersを使用していると、オブジェクトの破損などでPGroongaのWALの適用に失敗した場合にすべてのレプリケーションが停止します。 そのため、壊れたオブジェクトがデータベース内に存在する場合、Groongaはこの機能を使って、できる限り壊れたオブジェクトを削除しようとします。

修正

  • [query()] query()AND検索とOR検索検索を 'A || query("...", "B C")' の順で組み合わせたときに、誤った順序で評価される問題を修正しました。

    この問題の発生条件は下記の通りです。

    • OR検索とquery()を組み合わせて使っていること。
    • query()内でAND検索していること。
    • 'A || query("...", "B C")'の順序で条件式が記述されていること。

    そのため、query()を単独で使用している場合や、query()内でAND検索をしていない場合は問題ありません。

    以下の例では、memo @ "Groongaの条件がマッチする{"name": "Alice", "memo": "Groonga user"}がヒットするはずですが、 この問題が発生した場合は下記の通りヒットしません。

    table_create Users TABLE_NO_KEY
    column_create Users name COLUMN_SCALAR ShortText
    column_create Users memo COLUMN_SCALAR ShortText
    
    load --table Users
    [
    {"name": "Alice", "memo": "Groonga user"},
    {"name": "Bob",   "memo": "Rroonga user"}
    ]
    select Users \
      --output_columns 'name, memo, _score' \
      --filter 'memo @ "Groonga" || query("name", "Bob Rroonga")'
    [[0,0.0,0.0],[[[0],[["name","ShortText"],["memo","ShortText"],["_score","Int32"]]]]]
    

    修正後は、以下のように{"name": "Alice", "memo": "Groonga user"}がヒットします。

    select Users \
      --output_columns 'name, memo, _score' \
      --filter 'memo @ "Groonga" || query("name", "Bob Rroonga")'
    [
      [
        0,
        1719376617.537505,
        0.002481460571289062
      ],
      [
        [
          [
            1
          ],
          [
            [
              "name",
              "ShortText"
            ],
            [
              "memo",
              "ShortText"
            ],
            [
              "_score",
              "Int32"
            ]
          ],
          [
            "Alice",
            "Groonga user",
            1
          ]
        ]
      ]
    ]
    
  • [select] --query "A* OR B"のように先に前方一致検索を評価する条件が、誤った検索結果を返すことがある問題を修正しました。

    この問題は先に前方一致検索を評価する条件の時に発生する可能性があります。 --query A OR B*のように最後に前方一致検索を評価するケースでは発生しません。

    この問題が発生すると、以下の--query "Bo* OR li"という条件が、Boliも前方一致検索として評価されてしまいliの検索結果が誤ったものになります。 Aliceがヒットするのが期待値ですが、以下のように何もヒットしません。これは、前述の通りliが前方一致検索として評価されてしまうためです。

    table_create Users TABLE_NO_KEY
    column_create Users name COLUMN_SCALAR ShortText
    
    load --table Users
    [
    ["name"],
    ["Alice"]
    ]
    
    select Users \
      --match_columns name \
      --query "Bo* OR li"
    [
      [
        0,
        1719377505.628048,
        0.0007376670837402344
      ],
      [
        [
          [
            0
          ],
          [
            [
              "_id",
              "UInt32"
            ],
            [
              "name",
              "ShortText"
            ]
          ]
        ]
      ]
    ]
    

おわりに

毎週火曜日の 12:15 - 12:45 にGroonga関連のイベントをオンラインで実施しています。

各イベントの予定はconnpassのページに記載しています。

(上記のページで参加登録しなくても資料やイベントは閲覧可能です。)

今までのオンラインイベントは、以下の場所に格納されていて、いつでも視聴できます!

Groongaリリース自慢会

Groonga開発者に聞け!

興味のある方はぜひ視聴してみてください。 それでは、Groongaでガンガン検索してください!