Hibernate Searchって何だ?
Hibernate Searchとは?
本連載では、Hibernate Searchによる全文検索システムの構築について解説していく。
Hibernate Searchとは、JBoss Hibernateのフレームワークから透過的に全文検索の機能を利用できるようにしたJBoss Hibernateへのアドオン・コンポーネントである。「透過的」な全文検索機能へのアクセスにはJBoss HibernateのAPIとアノテーションを通じて行う。また、全文検索の機能は「JBoss EAP+Luceneによる全文検索システム」で紹介している「Lucene」の利用が前提となっているので注意してほしい。
筆者はHibernate Searchを使う理由には、2つの大きなメリットがあると考えている。
メリット1「RDBと検索エンジンのデータの同期」
「JBoss EAP+Luceneによる全文検索システム」では、Yahoo!オークションの商品情報を検索するWebアプリケーションを作成している。そこでは商品情報をLuceneの転置索引(以下、検索インデックス)に登録したため、リレーショナルデータベース(以下、RDB)を必要としていない。
しかし現実のシステムでは商品の全情報はRDBで管理し、全文検索のために必要な一部の情報を使って検索インデックスを作成する。これはRDBと検 索エンジンを比較した場合、RDBはデータ管理が得意であり、検索エンジンは全文検索が得意という特徴があるからだ。
具体的には、RDBはデータの新規追加(INSERT)、更新(UPDATE)および削除(DELETE)をリアルタイムにこなすことが得意である。しかし、全文検索を行うにはLIKEによるパターンマッチを使用することになり、レコード件数が多い場合に性能上の問題が出てくる。一方で、検索エン ジンは全文検索を得意とするが、リアルタイムのデータ更新は不得意である。
そこで両者のメリットを活かしたシステム構築を行う必要がでてくる(図1)。
RDBと検索エンジンを組み合わせたシステム構築を行う場合、今度は「RDBのテーブル内のレコードの情報」と「検索エンジンの検索インデックスの内容」を同期させなければならない、という新たな課題が持ちあがってくる。
この課題を克服するものとしてHibernate Searchが利用できるのだ。Hibernate Searchのセッションを通じてRDBに更新(INSERT/UPDATE/DELETE)をかけると、自動的に検索インデックスの更新が行われるようになる。これがHibernate Searchの第1のメリットである。なお、Hibernate Searchを利用するには、JBoss Hibernateの使用が必須となる。
JBoss HibernateはJavaオブジェクトをRDBのテーブルに永続化するために、オブジェクト/リレーショナルマッピング(O/Rマッピング)を自動的に行うオープンソースのフレームワークである。JBoss Hibernateは、JBoss Enterprise MiddlewareのJBoss Enterprise Frameworksとして提供されており、レッドハット社のサポートが受けられる。
以降ではJBoss Hibernateへの基本知識があるものとして解説していくので、詳しく知りたい方は下記のURLを参照していただきたい。
http://www.hibernate.org/344.htm
※対象ページ閉鎖
JBoss Hibernate(レッドハット社)
http://www.jp.redhat.com/jboss/frameworks/hibernate/
次にもう1つのメリットを解説する。