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