なぜLuceneをデータベースに入れるのだろうか?Marcelo Ochoa氏がこの疑問に答えている。
OracleにはOracle Textと呼ばれるフル装備のエンタープライズエンジンがあり、またそれはCで作られておりOracle Engineに統合されるものである。
- 次回リリースにどの機能が含まれるかを管理することはできない
- あなたのニーズに応じて簡易にカスタマイズすることはできない
Oracle JVM内で作動しているLucene IntegrationであるOJVMDirectoryで開発者は下記のようなことができる。
- 構築済み、また未構築のデータのインデックス
- いろいろなテーブルから生み出されたフィールドから成るLuceneの合成ドキュメントを作り、クエリタイムで複雑化したジョインを削除する必要性を省く
- LucenインデックスをJavaから直接的にクエリする
この新たなリリースに搭載されている機能は下記のとおりである。
- 最新のLucene 2.2.0と連携。
- 直接的なBLOB IOによって、大規模なインデックスのメモリ使用を減らし、Vectorに基づいた実装を使用してメモリストレージに交換されている。
- ユーザデータストアのサポート。ということは一度におけるコラムとインデックスが一つに制限されていないということである。(10gのデータカートリッジAPIによって制限されている。)ベーステーブルの複数のコラムと統合した関連性テーブル上のコラムをインデックス可能。
- ユーザデータストアがカスタマイズ可能 シンプルなJava Classの記述でユーザはドキュメント追加のステップ前に使用済みもしくは他の機能を入れ、どのコラムがインデックスされるか選択することができる。
- それぞれのデータベースコラムを表すフィールドと一緒にLucen Documentを作り、全てのクエリのコラムを得るデフォルトユーザデータストアがある。このフィールドは、もし番号もしくは例えばDATEのデータがあり四捨五入されれば自動的に挿入される。
- lcontains() SQL オペレータが全てのインデックスされたコラムへのアクセス権を提供する、Lucene Query Parserをフルサポート。
- DOMAIN_INDEX_SORTとFIRST_ROWS hintに対するサポート。というのはもしあなたがlscore()によって列を順序立てたかったらオプティマイザーヒントはLucene Domain Indexがそれを仕分けするインラインビューを防ぐ適切な順序にrowidsを返還するよう推定するということだ。
- AQのコールバックをしようした自動のインデックス同時進行。
- Lucene Domain IndexはユーザのスキーマでIndexName$QTというストレージテーブルと共にIndexName$Tと呼ばれる余分なテーブル、IndexName$Qと名付けられたOracle AQを生成する。そうすることによってストレージのプリファレンスを変更することができるのだ。
- ojvmプロジェクトはSourceForge.net CVSにあるので誰でもそれを入手でコラボレートすることができる。
- 10gR2と11gデータベーステスト済み。
上記の例と情報はdbprism/ojvmプロジェクトにて参照(txt・英語)することが出来、またコードはそのプロジェクトからダウンロード可能だ(サイト・英語)。
この統合の更なる詳細はMarcelo氏のブログにて閲覧できる(ブログ・英語)。