[groonga-dev,04020] [ANN] PGroonga 1.0.6

Back to archive index

Kouhei Sutou kou****@clear*****
2016年 4月 19日 (火) 12:25:40 JST


須藤です。

PGroonga 1.0.6をリリースしました!

  http://groonga.org/ja/blog/2016/04/15/pgroonga-1.0.6.html

## アップグレード方法

1.0.6は1.0.5と互換性があります。

http://pgroonga.github.io/ja/upgrade/#compatible-case の
手順でアップグレードしてください。

## 変更点

  * [Windows] DLLにバージョン情報を含めるようにしました。

  * [pgroonga.text_full_text_search_ops_v2オペレータークラス]
    類似文書検索を行う演算子&~?を追加しました。

  * [pgroonga.text_term_search_ops_v2オペレータークラス] 前
    方一致検索を行う演算子&^を追加しました。

  * [pgroonga.text_term_search_ops_v2オペレータークラス] 前
    方一致RK検索(ローマ字・ひらがな・カタカナ入力でカタカナ
    データを前方一致検索する検索)を行う演算子&^~を追加しま
    した。

  * [Windows] バンドルするGroongaを6.0.1にアップグレードしま
    した。

  * [Windows] ビルド対象のPostgreSQLを9.5.2にアップグレード
    しました。

  * [Windows] Visual Studio 2015ではなく2013を使ってビルドす
    るようにしました。PostgreSQLのバイナリーが2013でビルドさ
    れていることに気づいたためです。

## 前方一致検索と前方一致RK検索について

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

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

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

----
CREATE TABLE tags (
  name text PRIMARY KEY
);

CREATE TABLE tag_readings (
  tag_name text
    REFERENCES tags ON DELETE CASCADE ON UPDATE CASCADE,
  katakana text,
  PRIMARY KEY (tag_name, katakana)
);

INSERT INTO tags VALUES ('PostgreSQL');
INSERT INTO tags VALUES ('Groonga');
INSERT INTO tags VALUES ('PGroonga');
INSERT INTO tags VALUES ('pglogical');

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

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

----
CREATE INDEX pgrn_tags_index ON tags
  USING pgroonga (name pgroonga.text_term_search_ops_v2);
CREATE INDEX pgrn_tag_readings_index ON tag_readings
  USING pgroonga (katakana pgroonga.text_term_search_ops_v2);
----

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

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

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

----
SELECT tag_name, katakana
  FROM tag_readings
  WHERE katakana &^~ 'pos';
--   tag_name  |        katakana        
-- ------------+------------------------
--  PostgreSQL | ポスグレ
--  PostgreSQL | ポストグレスキューエル
-- (2 rows)
----

UNIONすると結果をまとめて取得できます。(JOINしてもよいです。)

----
SELECT name
  FROM tags
  WHERE name &^ 'pos'
UNION
SELECT tag_name
  FROM tag_readings
  WHERE katakana &^~ 'pos';
--     name    
-- ------------
--  PostgreSQL
-- (1 row)
----

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

----
SELECT name
  FROM tags
  WHERE name &^ 'pi-ji-'
UNION
SELECT tag_name
  FROM tag_readings
  WHERE katakana &^~ 'pi-ji-';
--    name    
-- -----------
--  PGroonga
--  pglogical
-- (2 rows)
----

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

1.0.6をリリースした後に、次のように使えると便利そうだと気づ
きました。次のリリースではもっと便利になる予定です。ご期待く
ださい。

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

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

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

SELECT name
  FROM tags
  WHERE name &^ 'pi-ji-' OR
        readings &^~ 'pi-ji-';
--    name    
-- -----------
--  PGroonga
--  pglogical
-- (2 rows)
----

## おしらせ

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

次回は4月22日(今週の金曜日)に開催です。

  * https://groonga.doorkeeper.jp/events/41978

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

  * https://groonga.doorkeeper.jp/events/41770


それでは、PostgreSQLで日本語全文検索をしたい場合はPGroongaを
試してみてください。

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
リーダブルコードワークショップ:
  http://www.clear-code.com/services/code-reader/readable-code-workshop.html




groonga-dev メーリングリストの案内
Back to archive index