Fess 13はElasticsearch 7に対応するメジャーアップデートリリースになります。ということで、使い勝手のUI的なところはほとんど変わっていない気がしますが、中身の仕組み的なところはいろいろと変更が入っています。
Transport 通信の廃止
Fess 13からは9300などでのTransportによる通信はしません。HTTPで9200などでElasticsearchと通信するようになりました。Fess 12まではダッシュボードはHTTPで通信して、その他がTransportを使っていました。ElasticsearchがTransportでの外部からの接続はやめるとのことなので、Fess 13からはすべてをHTTPで通信するようになりました。
ソースコード的には、さすがにHTTPへの書き換え作業をすると絶望的なコード量なので、elasticsearch-clientというのを作り、TransportClientを使っている部分はそのままで動くようなライブラリを作り対応しました。これにより、今までどおりの使い方で、HTTPとしてElasticsearchと通信できるようになりました。
Java 11対応
Java 11対応というよりはJava 8を捨てました。Elasticsearch 7はまだJava 8もサポートしていると思いますが、Fessを利用する顧客からJava 8指定で要求されることがないですし、サポート対象を減らしたほうがメンテが楽なので、Fess 13からJava 8をやめました。Lucene自体もMR Jarだったりするので、Java 11を使ったほうがパフォーマンス向上を期待できる部分もあると思うので。
これにあわせて、G1GCをデフォルトで使うようにしてあります。チューニングはしたものの、8GBメモリ以下くらいの環境だと、まだOOMが出る場合もあるかもしれないので、引き続き微調整していく必要があると考えています。それ以上メモリが使えるなら、ヒープへの割り当てを増やせば特に問題はないと思います。
JavaScriptエンジン
Java 11では、Nashornを使っていると、将来のリリースではなくなるよー、という感じのメッセージが出ます…。とはいえ、Fess(というか、Lasta DI)ではJavaScriptエンジンが必要あり、なんとかする必要があったので、FessではNashornをフォークしたsaiを作りました。ということで、Fess 13からは利用するJavaScriptエンジンを変更しています。
ラベルの指定方法
Fess 12まではクロール設定でクロール設定単位でのラベルの設定ができたのですが、この設定方法は利用者を混乱させていました。ということで、ラベルの指定方法はラベルの設定で正規表現で指定することでクロール時にラベルが付加されるように一本化しました。
言語判定
Fess 12まではElasticsearch側にlangfieldプラグインを入れることで、言語情報の付加を行っていました。Elasticsearch側で言語判定を行う場合、できることも限られているため、柔軟な言語判定処理ができるようにするためにFess側で言語判定処理を行うようにしました。そのため、Fess 13からはlangfieldプラグインが不要になりました。
以上のような感じの見た目ではわからないような大きな変更が入っているかと思います。今後も、ドキュメント管理機能やrank_featuresによるスコア最適化など、新しい機能も考えています。まだまだチャレンジは続くと思うので、ぜひ、Fess 13を使ってみてください。