PGroonga(ぴーじーるんが) 0.8.0リリース
PostgreSQLからGroongaを使えるようにするPGroongaの0.8.0をリリースしました!
PGroongaについてやPGroongaと他の類似システムとの違いについてはPGroonga 0.2.0のリリースアナウンスを参考にしてください。
0.8.0は0.7.0と互換性があるので、PGroonga用のインデックスを再作成する必要はありません。PGroongaをアップグレードし、接続しなおせばPGroonga 0.8.0になります。
PGroongaの速度については次の記事を参考にしてください。
0.8.0での変更点
0.6.0からの変更点は次の通りです。(0.7.0のリリースアナウンスをしていなかったので0.7.0の変更点も含みます。)
- 非互換:これまではPGroongaのログはPostgreSQLのログ出力の仕組みを使って出力していましたが、ファイルに出力するように変更しました。この挙動は
pgroonga.log_type
(後述)とpgroonga.log_path
(後述)で変更できます。 pgroonga.log_type
: ログの出力方法を変更する変数を追加しました。ファイル、Windowsイベントログ、PostgreSQLのログ出力機構、のどれかを選べます。pgroonga.log_path
: ファイルにログを出力するときの出力先のファイル名を変更する変数を追加しました。pgroonga.log_level
: ログレベルを変更する変数を追加しました。pgroonga.lock_timeout
: ロック獲得時のリトライ数を変更する変数を追加しました。pgroonga.snippet_html
: 指定したテキストから指定したキーワード周辺のテキストを抽出する関数を追加しました。よくWeb検索エンジンの検索結果に表示されているやつです。PGroongaの全文検索機能に依存していないので、この関数単独でも使えます。- Ubuntu 14.04 TLS (Trusty Tahr)のパッケージ提供を開始しました。
TRUNCATE
すると動かなくなる問題を修正しました。VACUUM
時の処理を高速化しました。
pgroonga.log_type
のWindowsイベントログ出力とpgroonga.snippet_html
関数は少し細かく説明します。
pgroonga.log_type
のWindowsイベントログ出力
次のように設定するとWindowsイベントログとしてログを出力できます。(通常は↓のようにSQLで設定せずにpostgresql.conf
に書いて設定します。)
SET pgroonga.log_type = 'windows_event_log';
これだけでWindowsイベントログに記録されるのですが、この状態でイベントビューアーで表示すると警告メッセージがでてログを確認しづらいです。
次のようにコマンドプロンプトから「PGroonga」というイベントを登録することで、警告メッセージが消えて確認しやすくなります。Windowsイベントログを使うときは設定することをオススメします。
> regsvr32 /n /i:PGroonga ${PostgreSQLをインストールしたフォルダ}\lib\pgevent.dll
なお、この手順はPostgreSQLでWindowsイベントログを利用する場合の手順と同様です。参考:WindowsにおけるEvent Logの登録
pgroonga.snippet_html
関数
pgroonga.snippet_html
関数を使うと該当テキスト中からキーワードが含まれている箇所の周辺テキストを抽出できます。Web検索エンジンは検索結果にこの情報を含めていることが多いので見たことがあるはずです。
例として、次のテキスト(Groongaの説明文)を使います。
Groonga is a fast and accurate full text search engine based on inverted index. One of the characteristics of Groonga is that a newly registered document instantly appears in search results. Also, Groonga allows updates without read locks. These characteristics result in superior performance on real-time applications.
このテキストの中には「fast
」というキーワードが含まれています。pgroonga.snippet_html
を使うと「fast
」周辺のテキストを抽出します。キーワードは「<span class="keyword">
」と「</span>
」で囲まれます。pgroonga.snippet_html
のhtml
はHTMLとして出力するという意味だということです。
Groonga is a fast and accurate full text search engine based on inverted index. One of the characteristics of Groonga is that a newly registered document instantly appears in search results. Also, Gro
なお、この機能はPGroongaで検索した結果以外にも使えます。そのため、次のようにFROM
なしのSELECT
でも使えます。なお、unnest
は配列を行にするPostgreSQLの関数です。
SELECT unnest(pgroonga.snippet_html(
'Groonga is a fast and accurate full text search engine based on ' ||
'inverted index. One of the characteristics of Groonga is that a ' ||
'newly registered document instantly appears in search results. ' ||
'Also, Groonga allows updates without read locks. These characteristics ' ||
'result in superior performance on real-time applications.' ||
'\n' ||
'\n' ||
'Groonga is also a column-oriented database management system (DBMS). ' ||
'Compared with well-known row-oriented systems, such as MySQL and ' ||
'PostgreSQL, column-oriented systems are more suited for aggregate ' ||
'queries. Due to this advantage, Groonga can cover weakness of ' ||
'row-oriented systems.',
ARRAY['fast', 'PostgreSQL']));
-- unnest
-- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Groonga is a <span class="keyword">fast</span> and accurate full text search engine based on inverted index. One of the characteristics of Groonga is that a newly registered document instantly appears in search results. Also, Gro
-- ase management system (DBMS). Compared with well-known row-oriented systems, such as MySQL and <span class="keyword">PostgreSQL</span>, column-oriented systems are more suited for aggregate queries. Due to this advantage, Groonga
-- (2 rows)
pgroonga.snippet_html
の使い方は次の通りです。
pgroonga.snippet_html(target, ARRAY[keyword1, keyword2, ...])
target
はtext
型の値でキーワード抽出対象のテキストを指定します。
keyword1
, keyword2
, ...
はtext
型の配列で、抽出対象のテキストを指定します。1つ以上指定してします。
pgroonga.snippet_html
はtext
型の配列を返します。
配列の各要素にはキーワード周辺のテキストが含まれています。キーワードは「<span class="keyword">
」と「</span>
」で囲まれ、元のテキストに含まれる<
, >
, &
, "
はHTMLエスケープされます。
各要素に含まれる元テキストは最大200バイトになります。文字数ではなくバイト数です。これに加えて「<span class="keyword">
」と「</span>
」が増え、<
や>
を<
, >
などに変換するので、各要素のテキストは200バイト以上になることがあります。
おねがい
PGroongaは毎月のリリースを重ねて、性能も使い勝手も向上してきました。上述のベンチマーク結果を見ると実用になる速度がでていることがわかります。
すでに実際に利用している人たちもいます。まだ利用していない人は、ぜひ、自分たちのシステムで実用できるか検討してみてください。PGroongaは既存の優秀な全文検索エンジンGroongaを利用しているため性能は折り紙つきです。(検討結果を広く公開してもらえると他のPostgreSQLユーザーに有益です!)
また、公式サイト公開に向けて協力してくれる人も募集しています。http://pgroonga.github.io/で英語でも情報も公開しようと進めています。コードは書けないけど英語は書ける、デザインはできるなど協力してくれる方はGitHubのIssueにコメントを書いてください。まずはREADMEを英語に翻訳する作業があります。
まとめ
最新のPostgreSQLでGroongaを使えるようにするPGroongaの新しいバージョンをリリースしました。PostgreSQLで日本語全文検索をしたいという方はぜひ試してみてください!