データベースクロール機能

Fessをいろいろな方に紹介すると、データベース内のデータも対象にしたいのだよね~、と毎回言われる。まぁ、SolrにはDataImportHandlerというのがあるから、これを使ってSolrに直接入れれば良いとも思うのだが、使い勝手をウリにする Fess としては導入の敷居が一気に上がってしまうことになる。solrconfig.xmlを編集して、data-config.xmlを作って、コマンド叩いてね…というのもね。というわけで、データストア機能という感じでFessに実装した。
ウェブクロール設定とかと同じように、データストアクロール設定が追加してみた。パラメータを設定すれば、指定したSQL文からデータを取得して、Solrに投入する。たとえば、

CREATE TABLE job (
id BIGINT NOT NULL AUTO_INCREMENT
, title VARCHAR(100) NOT NULL
, content VARCHAR(255) NOT NULL
, versionNo INTEGER NOT NULL
, PRIMARY KEY (id)
);

みたいなテーブルがあったとすると、データストアクロール設定のパラメータに「キー=値」形式で

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jobdb?useUnicode=true&characterEncoding=UTF-8
username=hogeuser
password=fugapass
sql=select * from job

というように入力して、ハンドラには同様に「キー=値」形式で

url="http://localhost/" + id
host="localhost"
site="localhost"
title=title
content=content
cache=content
digest=content
anchor=
contentLength=content.length()
lastModified=content.length()

というように Fess の Solr スキーマに必要なマッピングルールを書く。キーについて簡単にまとめると

url URL(検索結果に表示されるリンク)
host ホスト名
site サイトパス
title タイトル
content コンテンツ(インデックス対象文字列)
cache コンテンツのキャッシュ(インデックス対象ではない)
digest 検索結果に表示されるダイジェスト部分
anchor コンテンツに含まれるリンク(普通は指定する必要ないと思う)
contentLength コンテンツの長さ
lastModified コンテンツの最終更新日

という感じ。値の方は OGNL で記述する。文字列は “~” で書けば良い。データベースのカラム名で記述すればその値になる。OGNLなので、やろうと思えばいろいろとできるかと(^^;。あとは、他のクロール設定と同様の使い方です。実際にデータベースにアクセスするときにはドライバが必要になるので、webapps/fess/WEB-INF/cmd/libにjarファイルを入れておく必要がある。
現時点では、データベースだけだけど、XMLやExcelなどから取る機能も追加したいところ。
Fess 3.0 も Solr 1.4 にするだけかと思っていたら、あれこれと大玉が追加してしまったな…。あとは、設定ウィザードページを追加したら、3.0 をリリースしようかと思っている感じ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です