BloGroonga

2017-07-03

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

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

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

ハイライト

1.2.1以降のハイライトは次の通りです。

  • 演算子名の整理

  • クエリー展開機能をサポート

  • 入力補完機能をサポート

  • 類似文書検索をサポート

  • jsonbの全文検索の使い勝手を向上

それぞれ説明します。

演算子名の整理

PGroongaはクエリー言語を用いた全文検索用の演算子としてtextsearchと同じ@@を使っていました。これは@@だと既存のPostgreSQLユーザーはなじみやすいのではないかという期待からです。しかし、textsearchとPGroongaの全文検索の挙動が違うためにかえって使いにくいものになりました。

そこで、@@の代わりに&?を導入しました。psqlで直接SQLを実行するときはこれで問題ないのですが、各種言語のクライアントライブラリーから使うときには使いにくかったです。これは、?はクライアントライブラリーがSQLを組み立てるときに使うプレースホルダー文字と同じためです。

そのため、@@でも&?でもなく&@~を使うことにしました。この演算子名にした理由は次の通りです。

  • &:PGroongaの演算子全体で&をプレフィックスに使うようにしたため。

  • @:textsearchの@@演算子と同様に全文検索機能を提供することをわかりやすくするため。

  • ~:RubyやPerlでは~で正規表現によるパターンマッチを表現しているのでそれにならったため。クエリー言語は正規表現ではないが、パターンのようなものと捉えることもできるため、~をつけることで「指定したキーワードでの全文検索(演算子名は&@)」ではなく「クエリー言語での全文検索」を表現した。

_v2が付かない既存の演算子クラスでも新しい演算子名を使えるので、徐々に新しい演算子名に移行できます。

クエリー展開機能をサポート

同義語検索(*)の実現にも使えるクエリー展開機能をサポートしました。

(*) 表記が異なっても同じ意味ならヒットする検索。たとえば、「PostgreSQL」でも「Postgres」でも「PG」でも「PostgreSQL」がヒットする。

クエリー展開ルール(同義語)は通常のテーブルで管理します。そのためいつも通りSELECTINSERTUPDATEDELETEを使えます。textsearchでは同義語辞書という専用の仕組みを用意しているため、特別な管理方法になります。

クエリー展開機能の詳細はpgroonga.query_expand関数を参照してください。

入力補完機能をサポート

最近の全文検索システムは単に全文検索できるだけでは機能不足で、検索ボックスでの入力補完は「あって当たり前」の機能になっています。そんな入力補完機能を実現できるようになりました。

入力補完は前方一致検索と全文検索の組み合わせで実現します。日本語での入力補完のためにローマ字での入力補完にも対応しています。たとえば、「gyu」(「ギ」のローマ字表記)で「牛乳」を補完できます。

補完候補は通常のテーブルで管理するので、管理しやすいです。

詳細はオートコンプリート機能の実装方法を参照してください。

類似文書検索をサポート

現在閲覧中の文書と関連する文書をユーザーに提示することでWebサイトの回遊率を高めるために有用な検索が類似文書検索です。_v2の演算子クラスを使うと類似文書検索できるようになりました。

類似文書検索の使い方は&~?演算子を参照してください。日本語の文書を類似文書検索する場合はTokenMecabを使った方が精度がよくなります。これについてはドキュメントの最後に書いているのでドキュメントは最後まで確認してください。

jsonbの全文検索の使い勝手を向上

これまでもjsonb内のテキスト全部を全文検索できましたが、もっと使い勝手がよくなりました。テキストカラムの内容を全文検索するのと同じように全文検索できます。

-- textカラムの場合
SELECT * FROM memos WHERE content &@~ 'キーワード1 OR キーワード2';
-- jsonbカラムの場合
SELECT * FROM logs WHERE record &@~ 'キーワード1 OR キーワード2';

詳細はjsonb型用の&@~演算子を参照してください。

アップグレード方法

1.0以降のすべてのバージョンと互換性があります。アップグレードの「互換性がある場合」用の手順でアップグレードしてください。

おしらせ

セミナー

8月1日(火)14:00-16:00にMySQL・PostgreSQL上で動かす全文検索エンジン「Groonga」セミナーを開催します。PGroongaの導入を検討している方はこの機会を活用してください。

サポートサービス

PGroongaのサポートサービスを提供しています。インデックスや検索の設計方法に関するコンサルティングやトラブル時の調査、パフォーマンス改善・新機能追加などの技術支援など、PGroongaに関わるサポートが必要な場合はご相談ください。

まとめ

PGroongaの新しいリリースを紹介しました。インデックス破損の自動復旧が追加されたりしてどんどん使いやすくなっています。

ここで紹介したもの以外の変更点はリリースノートを参照してください。

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