BloGroonga

2024-01-10

PostgreSQL用高速日本語全文検索モジュールPGroonga(ぴーじーるんが) 3.1.6リリース

PostgreSQLで高速日本語全文検索をできるようにするPGroongaの3.1.6をリリースしました!

ハイライト

今回のリリースの主な変更点は下記の通りです。

改良

  • 新しいオプション pgroonga.enable_row_level_security を追加しました。

    PGroongaのRLS(Row level security)サポートの有効/無効を設定できます。デフォルト値は有効です。 PGroongaのRLSサポートを無効にすることでパフォーマンスが向上するかもしれません。 しかし、PostgreSQLのRLS機能を使っている環境ではPGroongaのRLSサポートを無効にしてはいけません。無効にするとセキュリティーのリスクがあります。

    したがって、このオプションを使ってPGroongaのRLSサポートを無効にする場合は、事前にPostgreSQLのRLS機能を使っていないことを十分に確認してください。

    特定のセッションで一時的に設定をする場合は、下記のSQLで有効/無効を切り替えられます。

    • RLSサポートを無効にする場合

      SET pgroonga.enable_row_level_security = off
      
    • RLSサポートを有効にする場合

      SET pgroonga.enable_row_level_security = on
      

      設定を永続化する場合は、PostgreSQLの設定ファイルに以下のように記載してください。

    • RLSサポートを無効にする場合

      pgroonga.enable_row_level_security = off
      
    • RLSサポートを有効にする場合

      pgroonga.enable_row_level_security = on
      
  • 新しい型 pgroonga_condition を追加しました。関連して、新しい関数 pgroonga_condition() を追加しました。

    pgroonga_full_text_search_condition 型と pgroonga_full_text_search_condition_with_scorers 型は非推奨になります。 上記の型の代わりに、 pgroonga_condition を使ってください。

    pgroonga_full_text_search_condition 型と pgroonga_full_text_search_condition_with_scorers 型を使った クエリーは以下のように変化します。

    (変更前):

    column &@~ ('query', weights, 'scorers', index_name)::pgroonga_full_text_search_condition_with_scorers
    column &@~ ('query', weights, index_name)::pgroonga_full_text_search_condition
    

    (変更後):

    column &@~ pgroonga_conditon('query', weights, 'scorers', index_name => 'index_name')
    column &@~ pgroonga_conditon('query', weights, index_name => 'index_name')
    

    'index_name' は、index_name => 'index_name' のように 引数名 => '値' の形式で指定する必要があることに注意してください。 なぜ、 'index_name' をこのように指定しなければならないのかを解説します。

    pgroonga_condition() のシグネチャーは以下の通りで、指定が不要な引数は省略可能です。 引数を省略すると、どの位置になんの引数があるのかがわからなくなります。そのため、以下のシグネチャーと引数の位置が異なるものについては 引数名 => '値' の形式で書くことで、なんの引数の値なのかを指定します。

      pgroonga_condition(query text,
                         weights int[],
                         scorers text[],
                         schema_name text,
                         index_name text,
                         column_name text)
    
  • [開発者向け] ビルド環境をセットアップするスクリプトを新しく追加しました。 [GitHub#358][askdkcさんがパッチ提供]

    以下のように使用します。 Debian/Ubuntu環境で動作します。AlmaLinuxなどのRed Hat Enterprise Linux派生のディストリビューションでは動作しません。

      $ git clone https://github.com/pgroonga/pgroonga.git
      $ cd pgroonga
      $ ./setup.sh #PGroongaをビルドする環境を作ります。
      $ ./build.sh SOURCE_DIRECTORY BUILD_DIRECTORY #PGroongaをビルドします。
    

修正

  • PGroongaを2.4.1から2.4.2へバージョンアップすると、 pgroonga_snippet_html() が使えなくなる問題を修正しました。[takadatさんの報告]

  • pgroonga_query_expand() の第一引数にPostgreSQLの通常のテーブル以外を指定すると、PGroongaがクラッシュする問題を修正しました。

    例えば、以下のように pgroonga_query_expand() の第一引数に外部テーブルを指定すると、PGroongaはクラッシュします。

    CREATE EXTENSION IF NOT EXISTS postgres_fdw;
    
    CREATE SERVER remote_server
        FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (host 'localhost', port '5432', dbname 'remote_database');
    
    CREATE FOREIGN TABLE synonym_groups (
      synonyms text[]
    ) SERVER remote_server;
    
    SELECT pgroonga_query_expand('synonym_groups',
                                 'synonyms',
                                 'synonyms',
                                 'groonga');
    
    server closed the connection unexpectedly
    	This probably means the server terminated abnormally
    	before or while processing the request.
    The connection to the server was lost. Attempting reset: Failed.
    
  • PGroonga内で多くのエラーが発生した場合、エラー情報を記録するスタックを使い果たしてPostgreSQLがPANICを起こす問題を修正しました。

    この問題は、PGroonga 2.3.3以降で発生します。

感謝

  • askdkcさん
  • takadatさん

アップグレード方法

2.0.0以降を使っている場合はアップグレードの「互換性がある場合」用の手順でアップグレードしてください。

1.Y.Zを使っている場合はアップグレードの「非互換の場合」用の手順でアップグレードしてください。 PGroonga 1系と3系は互換性が無いためです。

サポートサービス

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PostgreSQLで高速に日本語全文検索をしたいという方はPGroongaを使ってガンガン検索してください!