FessのElastic Cloud対応

Fess 13.11.0でElastic Cloudを検証してみたけど、zip版だと設定すれば使えるかもしれないけど、FessのDocker版では使えなかった…。ということで、ちょっと修正したので、Fess 13.11.1からは使えるはず。

Elastic Cloudで利用するにあたっては、Elasticsearchを構築して、Elastic Cloudの管理画面から
・analysis-kuromoji
・analysis-nori
・analysis-smartcn
のプラグインを入れておく必要がある。

あとは、FessのDocker版を

docker run -p 8080:8080 -it \
 -e ES_HTTP_URL=https://〜.elastic-cloud.com:XXXX \
 -e ES_TYPE=cloud \
 -e ES_USERNAME=elastic \
 -e ES_PASSWORD=〜パスワード〜 \
  ghcr.io/codelibs/fess:snapshot

とすれば、Elastic CloudのElasticsearchを利用して、Fessが起動してくる。そのうち、インストールガイドに書いておくと思う。

Fess 13.11のリリース

Fess 13.11をリリースしました。

Fess本体からElasticsearchへの依存をなくした、初めてのリリースになります。とはいえ、本稼働させるためにはElasticsearchは必要になるので、運用するための構築方法はインストールガイドを参照してください。configsyncのインストール方法が今までと異なっているので、注意してください。

それでは、ざっと修正内容を振り返ってみましょう。

まず、ElasticsearchをFessから取り除く話で、CodeLibsではElasticsearch 7.10をフォークして、Fesenとしました。これは、Apacheライセンスで提供して、最新のElasticsearchと近いインターフェースを持たせて、Fessで最新のElasticsearchを使えるようにさせます。内部的な話なので、Fessを開発とかしなければ、遭遇することはない気がします。

次に、elasticsearch-dataformatプラグインを取り除きました。Elasticsearchの取り除きに関係しますが、Elasticsearchも必要最小限のプラグインで利用できるようにするため、FessでできることはFessで実装することで、elasticsearch-dataformatを取り除きました。

プラグイン管理画面で、インターネットに繋がらない環境でエラーになる問題があったので、インターネットが繋がらない環境で、管理画面でエラーが表示されないようにしました。

クロール設定のパラメータ等の入力で、passwordのようなキーの場合は、暗号化をして保存したりしていたのですが、tokenやsecretなどのキー名も暗号化するようにしました。

キーマッチ機能の強化で、今までは一つのクエリーに1つのキーマッチでしたが、複数指定できるようになりました。

管理APIのJSONレスポンスで、versionがありますが、今まで数値で返却していたのですが、13.10のような場合、jqとかに渡すと、13.1という感じで、切り捨てられたりするので、文字列に変更しました。検索APIのJSONレスポンスの方では文字列で、管理APIが数値となっていて、異なっていたものが、versionは文字列で返すに統一されました。(そのうち統一しようとは思っていたのですが、13.10で実害が出たので、今回実施しました)

実験的な機能として、fess_config.propertiesにelasticsearch.typeを追加しました。これにより、マネージドなelasticsearchでも動作ができるようになることを期待しています。まだ、クラウド系では検証できていないので、動作確認したら、ドキュメントとかも作られると思います。

パスマッピングに新しい選択肢として、保存したURLを追加しました。今までパスマッピングはインデックスする前に書き換えるしかできなかったのですが、クロールして取得したクロール先を書き換えたいという要件に対応できなかったので、管理画面からこの設定で書き換えができるようにしました。(過去のバージョンではxmlで指定することで書き換えはできます)

管理画面のダッシュボードで、elasticsearch 7.11だと使えないという問題があり、対応しています。これは、elasticsearch 7.11が_refreshなど、空bodyでないとエラーになるという仕様変更があったためです。

検索クエリーにLuceneのクエリーの予約文字があると、不正なクエリーとしてエラーが出るのですが、不正な文字があった場合は、エスケープしてクエリーを投げるようにしたので、今まで/とか含む検索文字を入れて、不正なクエリーエラーが出ていたようなケースでは検索が通るようになります。

以上になりますが、内部的にはFesenに変わることで、変更がいろいろとあったので、何かあればフォーラムとかに投げてください。

マネージドなElasticsearch対応

Fessはelasticsearchプラグインを入れることで、全文検索としての機能拡張をelasticsearchに対して行ってきたけど、たまにマネージドなelasticsearchでは動かないのか?と聞かれるたびに、動かん、と回答してきた。7.11でライセンス問題やプラグインのアクセス権強化問題などがあったりして、この機会にマネージドなelasticsearchに対する対応を見直すことにしました。

elasticsearchプラグインがなしになると、辞書まわりの機能が使えなくなったりして、その辺の機能劣化が出てくるけど、それでもマネージドなelasticsearchを使いたいというケースではfess_config.propertiesで

elasticsearch.type=cloud
elasticsearch.http.url=http://<yourserver>:9200
elasticsearch.username=<elasticsearchにアクセスするユーザー名>
elasticsearch.password=<elasticsearchにアクセスするパスワード>

のような感じの設定することで、elasticsearchプラグインなしのelasticsearchを利用する感じになる。(今後、いろいろと検証したりしたら修正するかも…)

ただし、Fessは多言語対応している都合上、elasticsearch純正の以下のプラグインはインストールしておく必要があります。
・analysis-kuromoji
・analysis-nori
・analysis-smartcn
これらも入れたくないような場合は、fess.jsonとdoc.jsonを修正する必要があります。

という感じで、辞書のカスタマイズとかが必要ない&マネージドなelasticsearchを使いたい、みたいな場合には、利用できるかなと思います。Fess 13.11から利用できるようになる予定です。