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