PostgreSQLに日本語全文検索機能を追加する拡張モジュール
Ludia概要 LudiaはRDBMSのPostgreSQLに全文検索インデックス機能を追加する拡張モジュールです。拡張モジュールとして実装しているため、PostgreSQL本体に手を加えずに利用できます。また、Namazuなどの全文検索エンジンと異なり検索エンジン用にテキストデータを別に用意する必要がないため、データの一元管理とセキュリティレベルの向上が図れます。
主な特徴PostgreSQLの拡張モジュールとして実現PostgreSQLに日本語全文検索機能を追加するにあたり、Ludiaでは、全文検索インデックス機能を提供する拡張モジュールというアプローチを採りました。これにより、以下のようなメリットが得られます。 PostgreSQLをそのまま利用可能拡張モジュール方式はPostgeSQL本体に手を加えずに利用できるため、本体にパッチを当てる方式の機能拡張と比較し、安定性/安全性の面で有利です。 データの一元管理を実現Ludiaはデータベース自体に全文検索インデックスを追加するため、テキストデータを全文検索システム用にコピーする必要がなくなります。データベースのセキュリティ機能を利用してアクセス制御が行えるため、全文検索システムを介して情報が漏洩するといったセキュリティリスクを回避できます。また、テキストデータを全文検索システム用にコピーする方式では避けられない文書の追加とインデックスの更新サイクルに起因する検索漏れが発生しません。 シンプルなSQLで開発期間を短縮既存のPostgreSQL向け全文検索機能では、PostgreSQLから外部の全文検索モジュールを呼び出すというインターフェイスが採用されているため、検索処理に複雑なSQLが必要でした。これに対しLudiaでは、PostgreSQLのインデックスとして実現されています。そのため、B-TreeインデックスなどのPostgreSQLの他のインデックスと同様の、シンプルなSQLで全文検索処理を記述できます。シンプルで理解しやすいインターフェイスにより、アプリケーション開発期間の短縮が期待できます。 検索SQL例: SELECT * FROM テーブル名 WHERE カラム名 @@ '検索語' 多彩な検索オプションLudiaは、単一キーワード検索から非常に高度な検索まで柔軟に対応することができます。 ブーリアン検索複数のキーワードに対し、AND検索、OR検索、NOT検索が可能。これらの検索条件を組み合わせることで、適切な文書のみを効率よく抽出できます。 AND検索 SELECT * FROM テーブル名 WHERE カラム名 @@ '単語1 +単語2'; OR検索 SELECT * FROM テーブル名 WHERE カラム名 @@ '単語1 単語2'; NOT検索 SELECT * FROM テーブル名 WHERE カラム名 @@ '単語1 -単語2'; 近傍位置検索指定した単語が、近接に位置する文書を検索します。 類似文書検索与えた文章と類似した内容を含む文書を検索することが可能。この機能は文章からのキーワード抽出とそのキーワードを使った検索処理によって実現されています。 高速な検索処理検索エンジンにSennaを採用 Ludiaでは、検索エンジンとしてオープンソースのSennaを採用。Sennaは高速かつ高精度な検索を特徴とする転置インデックスタイプの検索エンジンです。
卓越した中間一致検索速度SQLのLIKE文を使用した中間一致検索に比べ、Ludiaによる中間一致検索は非常に高速です(下表参照)。日本語検索が必要ないケースでも、中間一致検索を多用するケースではLudiaを導入することで検索処理の高速化を図ることができます。 表:中間一致検索の速度比較
配布内容 SourceForge.JP内のプロジェクトにて、以下のファイルを公開しています。
導入事例関連サイト開発者ブログ 関連記事
Q&AQ:Ludiaの動作環境は?A:PostgreSQL 8.1/8.2が動作する環境で利用できます。8.3でも動作しますが、厳密な動作確認は行われていません。なお、Ludia 1.4.0の開発/検証環境は以下のとおりです。
ludia-withdepsにはSennaおよびMeCabが含まれていますので、ludia-withdepsを利用する場合は別途ソースを入手する必要はありません。 Q:PostgreSQLでデータベースを運用しています。後付けでLudiaを導入することはできますか?A:PostgreSQLのバージョンが8.1/8.2であれば、既存のデータベース環境にそのまま導入できます。Ludiaは拡張モジュールなので、PostgreSQL自体を再インストールする必要はありません。Ludia導入時に必要となる作業については、READMEを参照してください。 問い合わせ先Ludiaについて Ludia全般 |