
LudiaはRDBMSのPostgreSQLに全文検索インデックス機能を追加する拡張モジュールです。拡張モジュールとして実装しているため、PostgreSQL本体に手を加えずに利用できます。また、Namazuなどの全文検索エンジンと異なり検索エンジン用にテキストデータを別に用意する必要がないため、データの一元管理とセキュリティレベルの向上が図れます。
PostgreSQLに日本語全文検索機能を追加するにあたり、Ludiaでは、全文検索インデックス機能を提供する拡張モジュールというアプローチを採りました。これにより、以下のようなメリットが得られます。
拡張モジュール方式はPostgeSQL本体に手を加えずに利用できるため、本体にパッチを当てる方式の機能拡張と比較し、安定性/安全性の面で有利です。
Ludiaはデータベース自体に全文検索インデックスを追加するため、テキストデータを全文検索システム用にコピーする必要がなくなります。データベースのセキュリティ機能を利用してアクセス制御が行えるため、全文検索システムを介して情報が漏洩するといったセキュリティリスクを回避できます。また、テキストデータを全文検索システム用にコピーする方式では避けられない文書の追加とインデックスの更新サイクルに起因する検索漏れが発生しません。
既存の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';
指定した単語が、近接に位置する文書を検索します。
与えた文章と類似した内容を含む文書を検索することが可能。この機能は文章からのキーワード抽出とそのキーワードを使った検索処理によって実現されています。
Ludiaでは、検索エンジンとしてオープンソースのSennaを採用。Sennaは高速かつ高精度な検索を特徴とする転置インデックスタイプの検索エンジンです。
SQLのLIKE文を使用した中間一致検索に比べ、Ludiaによる中間一致検索は非常に高速です(下表参照)。日本語検索が必要ないケースでも、中間一致検索を多用するケースではLudiaを導入することで検索処理の高速化を図ることができます。
表:中間一致検索の速度比較
| Ludia | LIKE文 | |
| 300件ヒット時 | 約1秒 | 約6分 |
| 1000件ヒット時 | 約3秒 | 約6分 |
SourceForge.JP内のプロジェクトにて、以下のファイルを公開しています。
ダウンロードページ
| プロダクト | 概要 | ライセンス | 公開予定 |
| ludia | Ludia本体のソースコード。Ludiaを初めてインストールするときは下のludia-withdepsが便利 | LGPL | 公開中 |
| ludia-win | LudiaのWindows版インストーラ | LGPL | 公開中 |
| ludia-withdeps | Ludia本体とLudiaが使用するSenna、MeCABのソースコードのセット | LGPL | 公開中 |
開発者ブログ
関連記事
A:PostgreSQL 8.1/8.2が動作する環境で利用できます。8.3でも動作しますが、厳密な動作確認は行われていません。なお、Ludia 1.4.0の開発/検証環境は以下のとおりです。
ludia-withdepsにはSennaおよびMeCabが含まれていますので、ludia-withdepsを利用する場合は別途ソースを入手する必要はありません。
A:PostgreSQLのバージョンが8.1/8.2であれば、既存のデータベース環境にそのまま導入できます。Ludiaは拡張モジュールなので、PostgreSQL自体を再インストールする必要はありません。Ludia導入時に必要となる作業については、READMEを参照してください。
Ludiaについて
Ludia全般