FessでElastic Cloudの利用方法

FessElastic Cloudに接続して利用する方法について、忘れないように書いておく。Elastic Cloudは簡単に2週間無料トライアルができるので、とりあえず、ログインして、Elasticsearchの作成をしょうとすると以下の選択が表示される。

ああ

Fessでは、Elasticsearchが使えれば良いので、今回は、Elastic Enterprise Searchを選択して構築する。Create deploymentボタンを押すと、以下のユーザー名とパスワードが表示される。

Downloadボタンを押下すると、ユーザー名とパスワードのcsvがダウンロードされ、Elasticsearchのクラスタが作成開始されるので、しばらく待つと、以下のように利用可能な状態になる。このページのElasticsearchのentrypointで、https://〜:〜 でElasticsearchのURLが取得できる。

左のメニューのElasticsearchリンクを押下すると、Elasticsearchクラスタの情報が表示される。

左のメニューのEditリンクを押下すると、クラスタの編集が表示される。

Fessで利用するためには、Elasticsearchプラグインをインストールする必要があるので、Settings and Pluginsリンクを押下する。

analysis-kuromoji、analysis-nori、analysis-smartcnを選択して、Backボタンをおして、クラスタの編集を保存すると、確認画面が表示される。

Confirmボタンを押下すると、プラグインのインストールが始まる。ローリングリスタートで順番にノードが再起動されて適用されていく。しばらく待てば反映される。

以上でElastic CloudがFessで利用できる状態になる。

あとは、Fessを起動したいサーバーで実行すれば良いので、

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

とすれば、利用できる。(snapshotの部分は、13.11.1以降を指定する)

Fessの方は激しいクロールとかしなければ、1G以下くらいのメモリーでも動くと思うし、ECSとか、マネージドな環境とかで上げておけば、運用とか楽かも。クロール用とフロント用とか、分けてあげても良いかも。という感じで、手間いらずな環境をいろいろと作れる可能性もありますね。

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に変わることで、変更がいろいろとあったので、何かあればフォーラムとかに投げてください。