Fess 13.3のリリース

検索としての新機能とかは特にない気がするけど、Elasticsearch 7.3に対応したFess 13.3をリリースしました。

検索としては特にないけど、最近、データストアの実装を増やして、Fess本体に追加していくと、配布バイナリのサイズが着実に大きくなってきたり、実行時にメモリに読み込むクラス数が増えてしまったりという課題がありました。そこで、もともとあとから追加とかも可能なデータソースの実装を管理画面から追加するようにできるようにして、配布バイナリのスリム化を実現しました。管理画面的にはプラグインというページが増えています。

もともとプラグイン化の構想はあって、実装的には後から追加的なことが可能な状態にはなっていたのだけど、ようやく実施したという感じではあります。データストアの実装以外にも検索画面も変えられるようにしたかったりと、いろいろなものを組み替えられるようにもしたいなとは考えています。

という感じで、今回は特に目新しいものはないですが、どうぞご利用ください。

FessでIngestのパイプラインを使う

ちょっと前に対応するコードは入れていたのだけど動いていなかった…。ということで、次の13.2.1から使えるようになるはずです。

どう使うかというと、まずはパイプラインを以下のようにElasticsearchに設定しておく。(zip版で試したので9201ポート)

$ curl -XPUT -H "Content-Type: application/json" localhost:9201/_ingest/pipeline/split -d '{
  "description": "Splitter",
  "processors": [
    {
      "split": {
        "field": "tags",
        "separator": ","
      }
    }
  ]
}' 

あとは、Fessの管理画面でクロール設定の設定パラメータのところに

config.pipeline=split 

を記述しておけば、そのクロール設定でクロールしたものにはElasticsearch上のパイプラインが適用されます。

今回は動作確認をしたいので、設定パラメータに

field.value.tags=aaa,bbb

も入れておく。これでtagsフィールドに強制的にaaa,bbbの文字列が入る。入れるけど、パイプラインが適用されて配列として最終的にはインデックスに入る想定。

あとはクロールを実行して

$ curl -XPOST -H "Content-Type: application/json" localhost:9201/fess.search/_search?pretty
...
           "tags" : [
             "aaa",
             "bbb"
           ], 

という感じでインデクシングされたことが確認できる。

Fess 13.2のリリース

今回は、Elasticsearch 7.2に対応したくらいでしょうか。それ以外だと、G1GCのパラメータ調整を行ったりしてます。たまにOOMが出たりもするので…。商用でも13系を使っていきたいので、そろそろいけるかなという感じです。

ここからダウンロードできます。ご利用ください。

Fess 13.1のリリース

今回は特に目新しい新機能はないと思うけど、変更点としては以下の感じ。

  • Elasticsearch 7.1系対応
  • Label Updaterをジョブに追加
  • 韓国語のNoriに対応
  • elasticsearch-httpclientの独自スレッドプール追加
  • サジェスト表示がバグっていたので修正

といった感じだろうか。ラベルの更新については今まで、ラベルの設定を変えたけど、再インデクシング以外に反映できないという状態だったのだけど、このバージョンからはスケジューラのジョブの中にLabel Updaterがあるので、それを実行すればラベルの更新をしてくれる。

という感じですが、ここから利用可能です。

Fess 13のリリース

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を使ってみてください。