Download e desenvolvimento de software open source

sidebar_logo.gif


nttdata_logo_small.gif

co_name_data.gif

co_name_sentangijutsu.gif

co_canme_intramart.gif

co_name_businessbrains.gif

最近の更新ページ

2012-05-21
2012-05-01
2010-04-16
2010-04-15
2010-03-17

Copyright© 2008 NTTDATA CORPORATION

PostgreSQLに日本語全文検索機能を追加する拡張モジュール

illust_oss_project.gif

Ludia

概要

 LudiaはRDBMSのPostgreSQLに全文検索インデックス機能を追加する拡張モジュールです。拡張モジュールとして実装しているため、PostgreSQL本体に手を加えずに利用できます。また、Namazuなどの全文検索エンジンと異なり検索エンジン用にテキストデータを別に用意する必要がないため、データの一元管理とセキュリティレベルの向上が図れます。

ludia_Structure.png
Namazuなどを使った場合とLudiaの違い


主な特徴

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は高速かつ高精度な検索を特徴とする転置インデックスタイプの検索エンジンです。

ludia_Senna.png
Ludiaによる全文検索システムのソフトウェア構成


卓越した中間一致検索速度

 SQLのLIKE文を使用した中間一致検索に比べ、Ludiaによる中間一致検索は非常に高速です(下表参照)。日本語検索が必要ないケースでも、中間一致検索を多用するケースではLudiaを導入することで検索処理の高速化を図ることができます。

表:中間一致検索の速度比較

LudiaLIKE文
300件ヒット時約1秒約6分
1000件ヒット時約3秒約6分

配布内容

 SourceForge.JP内のプロジェクトにて、以下のファイルを公開しています。
ダウンロードページ

プロダクト概要ライセンス公開予定
ludiaLudia本体のソースコード。Ludiaを初めてインストールするときは下のludia-withdepsが便利LGPL公開中
ludia-winLudiaのWindows版インストーラLGPL公開中
ludia-withdepsLudia本体とLudiaが使用するSenna、MeCABのソースコードのセットLGPL公開中

導入事例

関連サイト

開発者ブログ

関連記事

Q&A

Q:Ludiaの動作環境は?

A:PostgreSQL 8.1/8.2が動作する環境で利用できます。8.3でも動作しますが、厳密な動作確認は行われていません。なお、Ludia 1.4.0の開発/検証環境は以下のとおりです。

  • OS:Red Hat Enterprise Linux AS/ES 4
  • DBMS:PostgreSQL 8.2.5(8.1.10)
  • Senna:1.0.9 (1.0.7以前のバージョンには対応していません)
  • MeCab:0.96

 ludia-withdepsにはSennaおよびMeCabが含まれていますので、ludia-withdepsを利用する場合は別途ソースを入手する必要はありません。

Q:PostgreSQLでデータベースを運用しています。後付けでLudiaを導入することはできますか?

A:PostgreSQLのバージョンが8.1/8.2であれば、既存のデータベース環境にそのまま導入できます。Ludiaは拡張モジュールなので、PostgreSQL自体を再インストールする必要はありません。Ludia導入時に必要となる作業については、READMEを参照してください。

問い合わせ先

Ludiaについて

Ludia全般


SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.