BloGroonga

2016-06-02

PGroonga(ぴーじーるんが) 1.0.9リリース

PostgreSQLからGroongaを使えるようにするPGroongaの1.0.9をリリースしました!

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

変更点

1.0.6からの変更点は次の通りです。

  • PostgreSQL 9.6beta1に対応しました。
  • [Ubuntu] Xenial Xerus(16.04 LTS)をサポートしました。
  • 検索キーワードをハイライトしたHTMLを返すpgroonga.highlight_html関数を追加しました。
  • 検索キーワードが何バイト目に含まれているかを返すpgroonga.match_positions_byte関数を追加しました。通常はこの関数を使う必要はありません。アプリケーション側で検索キーワードを処理したい場合に使います。
  • クエリーから検索キーワードを抽出するpgroonga.query_extract_keywords関数を追加しました。
  • [Windows] バンドルするGroongaを6.0.3にアップグレードしました。
  • [Windows] ビルド対象のPostgreSQLを9.5.3にアップグレードしました。
  • [pgroonga.text_array_term_search_ops_v2オペレータークラス] text[]型の値に対して前方一致検索を行う演算子&^>を追加しました。要素のどれか1つでもマッチすればマッチしたことになります。
  • [pgroonga.text_array_term_search_ops_v2オペレータークラス] text[]型の値に対して前方一致RK検索(ローマ字・ひらがな・カタカナ入力でカタカナデータを前方一致検索する検索)を行う演算子&^~>を追加しました。要素のどれか1つでもマッチすればマッチしたことになります。

前方一致検索・前方一致RK検索

今回のリリースではpgroonga.text_array_term_search_ops_v2オペレータークラスを追加しました。このオペレータークラスを使うとtext[]型に対して前方一致検索・前方一致RK検索を使うことができます。これらの検索は検索欄での入力補完を実現する場合に有用です。

タグを入力補完する例を使って簡単に使い方を説明します。

まず、タグ名とタグのヨミガナを登録します。

CREATE TABLE tags (
  name text PRIMARY KEY,
  readings text[]
);

INSERT INTO tags VALUES ('PostgreSQL', ARRAY['ポストグレスキューエル', 'ポスグレ']);
INSERT INTO tags VALUES ('Groonga',    ARRAY['グルンガ']);
INSERT INTO tags VALUES ('PGroonga',   ARRAY['ピージールンガ']);
INSERT INTO tags VALUES ('pglogical',  ARRAY['ピージーロジカル']);

タグ名とタグのヨミガナにインデックスを作ります。tags.readingspgroonga.text_array_term_search_ops_v2オペレータークラスを使っていることがポイントです。

CREATE INDEX pgroonga_tags_index ON tags
  USING pgroonga (name pgroonga.text_term_search_ops_v2,
                  readings pgroonga.text_array_term_search_ops_v2);

タグ名そのもの(PostgreSQLGroonga)に対して前方一致検索をするには次のようにします。

SELECT name
  FROM tags
  WHERE name &^ 'pos';
--     name    
-- ------------
--  PostgreSQL
-- (1 row)

タグをローマ字で検索するには次のようにします。

SELECT name, readings
  FROM tags
  WHERE readings &^~> 'pos';
--     name    |             readings              
-- ------------+-----------------------------------
--  PostgreSQL | {ポストグレスキューエル,ポスグレ}
-- (1 row)

ORすると結果をまとめて取得できます。

SELECT name, readings
  FROM tags
  WHERE name &^ 'pos' OR
        readings &^~> 'pos';
--     name    |             readings              
-- ------------+-----------------------------------
--  PostgreSQL | {ポストグレスキューエル,ポスグレ}
-- (1 row)

pi-ji-」で検索すると次のようになります。

SELECT name, readings
  FROM tags
  WHERE name &^ 'pi-ji-' OR
        readings &^~> 'pi-ji-';
--    name    |      readings      
-- -----------+--------------------
--  PGroonga  | {ピージールンガ}
--  pglogical | {ピージーロジカル}
-- (2 rows)

PostgreSQLを使って入力補完も実現できると、さらにPostgreSQLを有効活用できますね。

アップグレード方法

1.0.6、1.0.7、1.0.8と互換性があります。アップグレードの「互換性がある場合」用の手順でアップグレードしてください。

ただし、最後に_v2がついているオペレータークラス(pgroonga.text_full_text_search_ops_v2など)を使っている場合は互換性がないので、その場合は「非互換の場合」の手順でアップグレードしてください。

おしらせ

PGroongaだけでなく全文検索についても興味がある方は「Groongaで学ぶ全文検索」への参加もご検討ください。「Groongaで学ぶ全文検索」は予習・復習なしで全文検索を学ぶ、参加者に合わせて内容を決める、という限られた時間内でできるだけ実りある時間にしようというスタイルの勉強会です。全文検索を学びたい!という方はご活用ください。開催日程はDoorkeeperのGroongaコミュニティのページを参照してください。

次回は6月17日に開催です。

また、6月9日(木)の夜にはMySQLとPostgreSQLと日本語全文検索2を開催します。PGroongaに関する情報もあるのでぜひご参加ください。VVAULT AUDITというログ管理ソフトウェアでのPGroongaの利用事例の紹介もある予定です。

まとめ

PGroongaの新しいリリースを紹介しました。

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