Fess 3.0.0 リリース

第2回Solr勉強会にも間に合わせたいというのもあり、リリースしました。主な変更点は以下な感じ。

  • Solr 1.4 を利用
  • Solr の設定をマルチコアに変更
  • 差分クロール
  • クロールのプロセス化
  • 設定ウィザードの導入
  • データストアクロールの導入

当初は Solr 1.4 の置き換えくらいかと思っていたのだけど、メジャーバージョンアップな感じの大きな変更がいろいろと入っています。データストアクロールにより、データベースの内容をSolrに突っ込めます(データストアクロールはFessの独自用語)。現状は、DBしかないですけど、将来的にはXMLやExcel系のデータも投入したいところ。

そんな感じなのですが、現状の問題点はドキュメントが追いついておりません…(まぁ、基本は2.0.0と同じなのだけど)。しかも、今月は忙しくてどれだけ、ドキュメントを整備できるか微妙…。というわけで、何かあればお気軽にMLにでも投げてくださいませ。

http://sourceforge.jp/projects/fess/releases/

XMLとJSONで検索結果を出力する

Solrができるけど、Fessとしても検索結果として表示しているものと同じ内容のXMLとJSONを出力できるようになりました。まぁ、それらの形式で出力できるのは大きなことではないのだけど、この機能追加に伴い、検索結果のデータの持ち方を変更した。今まではDocumentというような独自のBeanクラスでやっていたけど、これをやめてMapに変えた。これによって、Solrでダイナミックフィールドとかにデータを投入しておけばそれも扱えるわけだ。そんなわけで、diconでクロール設定のSolrに投げるフィールドを設定すれば、FessのSolrスキーマでない、Solrにもドキュメント投入などが可能かと思う(ちょっとはスキーマ調整が必要かも)。つまり、Solrを利用するアプリ開発でドキュメント投入部分だけをFessに任せる案も可能では、と思い始める。そんなわけで、今まで Fess がターゲットユーザーと考えていなかった、既存の Solr ユーザーにも利用してもらえる可能性がある変更が入ったかな。

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

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