BloGroonga

2020-03-12

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

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

新規ユーザーの方は、PGroonga 2.0.2のリリースアナウンスのPGroongaについても参照してください。

注意

PGroonga 2.2.3 と 2.2.4 には以下の問題があるため、これらのバージョンは使用しないでください。

  • PGroonga 2.2.3

    • このバージョンは、Debian向け、Ubuntu向けのパッケージが依存関係の解決に失敗しインストールできない問題があります。
  • PGroonga 2.2.4

    • このバージョンは、 ALTER EXTENSION pgroonga UPDATE; を使用したアップグレードに失敗します。

ハイライト

PGroonga 2.2.5の主な変更点は以下の通りです。 (2.2.3, 2.2.4で入った変更点も合わせて記載しています。)

  • 同一のトランザクション内で CREATE TABLECREATE INDEXTRUNCATE を実行できるようにしました。

  • PGroongaのインデックスを使用した検索が選択されやすくなるように、PGroongaの検索コストの見積もりを調整しました。

    • 具体的には、同一のレコードに同じトークンが大量に含まれているケースで、PGroongaのインデックスが選択されるようになります。
  • PGroonga 2.2.4へのアップグレードが失敗する問題を修正しました。

  • PGroongaのjsonb用のインデックスだけがある状態で、検索条件のないSQLを実行すると、エラーになる問題を修正しました。

  • PGroongaが使用するGroongaのライブラリ( libgroonga )のバージョンが10.0.0以降の場合、シーケンシャルスキャンでの検索がエラーになる問題を修正しました。

同一のトランザクション内で CREATE TABLECREATE INDEXTRUNCATE を実行できるようにしました。

以前のバージョンでは、同一のトランザクション内でPGroongaのインデックスを作成し、 TRUNCATE すると TRUNCATE が失敗します。

例えば、以下のケースの場合に TRUNCATE が失敗します。

BEGIN TRANSACTION;
CREATE EXTENSION IF NOT EXISTS pgroonga;
CREATE TABLE test (
    id SERIAL PRIMARY KEY,
    content text
);
CREATE INDEX test_id ON test USING pgroonga (content);
TRUNCATE TABLE test CASCADE;
COMMIT;

PGroongaのjsonb用のインデックスだけがある状態で、検索条件のないSQLを実行すると、エラーになる問題を修正しました。

以前のバージョンでは、例えば、以下のケースの場合に SELECT COUNT(*) が失敗します。

CREATE TABLE logs (
  record jsonb
);
CREATE INDEX pgroonga_index ON logs
  USING pgroonga (record pgroonga_jsonb_ops_v2);
INSERT INTO logs VALUES ('{}');
SET enable_seqscan = off;
SELECT count(*) FROM logs;

PGroongaが使用するGroongaのライブラリ( libgroonga )のバージョンが10.0.0以降の場合、シーケンシャルスキャンでの検索がエラーになる問題を修正しました。

この問題は、PGroongaのパッケージをインストールしている場合は発生しません。GroongaとPGroongaをソースからビルドしてインストールしている場合にのみ発生します。

例えば、以前のバージョンでは、以下のケースの場合に SELECT が失敗します。

CREATE TABLE memos (
  content varchar(256)
);

INSERT INTO memos VALUES ('りんご');
INSERT INTO memos VALUES ('リンゴ');

CREATE INDEX pgrn_index ON memos
 USING pgroonga (content pgroonga_varchar_full_text_search_ops_v2);

SET enable_seqscan = on;
SET enable_indexscan = off;
SET enable_bitmapscan = off;

SELECT content, pgroonga_score(tableoid, ctid)
  FROM memos
 WHERE content &@~'りんご';

また、libgroonga のバージョンは以下のクエリーで確認できます。

SHOW pgroonga.libgroonga_version;

 pgroonga.libgroonga_version 
-----------------------------
 10.0.0
(1 row)

まとめ

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