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 をリリースしようかと思っている感じ。