Fess 14.7.0のリリース

Fess 14.7.0をリリースしました。細々としたものをいろいろと修正したような気もしますが、振り返っていきます。

まず、#2716はログファイルが指定した保存期間で古いのが消えるようにしました。90日以前のファイルは消すようになります。

#2717はサムネイルの保存ディレクトリのパス階層を変更しました。ファイルやディレクトリの数を減らすためです。

#2719はログファイルの出力形式をECS形式で出力できるようにしました。Docker版を利用すると、このバージョンからログがJSON形式で出力されるようになります。

#2721はjQueryのバージョンを最新化しました。

#2722はクロール時にHTMLのタグを取り除く機能があるのですが、取り除くタグをクロール設定の設定パラメーターにconfig.html.pruned.tagsで指定できるようにしました。クロール時にHTML上で無視したい利用域とかあれば、これでタグを指定できます。

#2723は内部で利用しているOpenSearchのバージョンを2.6にしました。

#2725はサムネイルの出力ログ周りの改善です。問題調査のログの整理をしました。

#2727は検索に失敗したときにシステムエラーでなく、検索失敗的なエラーメッセージを出す感じに変更しました。

#2728はドキュメントの部分更新の方法でupdate by queryで更新する対応を入れました。OpenSearchのNeural Searchを使うときにingest pipelineを使うのですが、pipelineはupdateを受け付けないためです。

#2729はScroll APIが動いていなかったので、修正しました…。

#2730はCopyrightが2022年のままだったので、更新しました。

という感じで、細々とした修正を入れた感じですが、そろそろOpenSearchのNeural Searchを使えるような状態にしていきたいなと思い、その辺の対応を入れている感じになります。現状でも、ベクトルで検索ができるのですが、いろいろと整理して、画像や音声もベクトル化して検索できるようにしていきたいなとは思っています。あとは、そろそろKubernetesでも簡単に使えるようにHelmチャートも用意しようと思ってはいますが、未着手です…。そんな感じですが、何かあればフォーラムに投げてください。

FessのログをJSON形式で出力

Fess 14.7からfess.logなどでログの出力形式をJSON形式に変える予定です。ちょっと前からそろそろJSONにしておいた方が便利そうだよな…と思っていたのですが、最近、ログ周りの整理をし始めたので、それに合わせて、JSON形式に変えることにしました。

とはいえ、JSON形式という感じで考えるのも自由すぎるし、変更量が多くなってもめんどくさいし、ということで、手軽に利用できそうな、Elastic Common Schema(ECS)を利用することにしました。jarファイルを追加して、log4j2.xmlを数行変えるだけで利用できるので、導入はかなり楽でした。

という感じで、audit.log、searchlog.log、fess-urls.logは今回の対象ではないので、それ以外のfess*.logは次のバージョンからJSON形式がデフォルトになります。

Fess 14.6.1のリリース

メンテナンスリリース的な感じですが、Fess 14.6.1をリリースしました。Playwrightのクロールがうまく行かない感じになっていたので、fess-crawler-playwerightのjarファイルを差し替えた感じです。Playwrightでのクロールが必要であれば、これを利用していただければと思います。

Fess 14.6.0のリリース

Fess 14.6.0をリリースしました。今回は、結構、細々としたものを含めて修正したような気分でもあります。

#2699はオフィス系のファイルで検索結果のタイトルにドキュメントのタイトルが表示されなくなっていたので、修正しました。

#2700は/api/admin/statsのパスでAdmin APIにサーバーの状態取得APIを追加しました。Admin APIでサーバーの情報を取得できるようになりました。

#2701は管理画面からbulkファイルをアップロードして、設定データを更新すると、ジョブが再起動されてしまうので、ジョブの情報が含まれていないようなファイルのアップロード時にはジョブを再起動しないようにしました。

#2702はPDFBoxなどがエラーレベルで普通にログを出力するので、この手のライブラリがERRORで出力されても、WARNに切り替えて、ログをするというのを追加しました。この手のライブラリが出すERRORログはFessにとっては、ERRORではないので、その調整をする感じなります。

#2703はFessの組み込みで利用しているOpenSearchのバージョンが2.4.1に変わりました。今まで、1系を利用していたので、最新化しました。これに合わせて、OpenSearch 1.xとElasticsearch 7.xのサポートはしないようになっていくと思います。現時点では、動いているようですが、これらで問題があっても修正しないと思うので、必要であれば、商用サポートに相談してください。

#2704はクロール設定を作るときに、除外パターンをデフォルトで設定できるようにしました。多くの場合、画像やCSSなどをクロール対象から除外すると思うので。

#2705はfessインデックスのsettingとmappingを書き換える設定を追加しました。fessインデックスは初回起動時に作成されますが、任意の設定を追加したい場合に差し込めるようにしました。セマンティックサーチを利用できる状態で起動したい場合に、インデックスの設定を変更したかったので、これを追加しました。

#2706は、内部的な話になりますが、表示件数を内部的に持ち回る必要があるための変更になります。これも、セマンティックサーチのプラグインに表示件数を渡す必要があるため、追加しました。

#2707はこれも内部的な話で、LuceneのQueryParserをラップすることで、生成されるQueryに外部から手を加えることができるようにするための変更です。これもセマンティックサーチで必要な変更でした。#2708も合わせて、Queryの処理を整理しました。

#2709は初回起動時のパスワードを指定できるようにしました。デフォルトのパスワード以外で初回起動したい場合もあると思いますし。

#2710はOpenSearchのデフォルト化する対応の修正になります。Fessでは、SolrからElasticsearchに、そして、ElasticsearchからOpenSearchへ、という感じで、標準で想定する検索エンジンをOpenSearchに切り替えていきます。今までは、Elasticsearchをメインで、OpenSearchもサポートしているよ、という感じですが、今後は、OpenSearchをメインで、Elasticsearchもサポートしているよ、という感じになります。なので、いままでどおりに、OpenSearchとElasticsearchのどちらでも動きます。

#2711はSSOログインのログメッセージの修正です。ログメッセージをわかりやすくしました。

#2712は管理画面でチェックボックスのフォームがある箇所で、項目名のところが反応してしまっていたので、修正しました。

#2713はこれを含めて、サジェスト生成周りの改善を行っています。サジェスト生成時に検索ログの情報を多く取りすぎていたので、必要最小限にしてます。

#2714はリリース作業チケットです。

#2715はパスマッピングの変換ログをデバックで出力するようにしました。

という感じで、いろいろと変更した感じです。何か問題などあれば、フォーラムをご利用ください。

Fessでセマンティックサーチ

Fessでキーワード検索ではなく、ベクトル検索をしないなっと思って、いろいろと挑戦していたけど、いい感じの形にならなかったので、どうしたものかと考えていたのですが、そんなとき、OpenSearch 2.4neural-searchプラグインが標準で搭載されました。これをアレコレと確認したところ、Fessではこれをベースに作ったほうが良いかもと思い、fess-webapp-semantic-searchプラグインを作り始めました。

fess-webapp-semantic-searchプラグインは、neural-searchプラグインをFessでいい感じに利用できるようにする機能を提供して、Fess 14.6から使えるようにしようと思っています。今回、利用できるようにするために、あちこちと修正した気もしますが、ちょっと悩んだのが、検索語の入力方法で、クエリーのパースをどのようにしておくのが、Fessとして自然な利用になるのか?というところです。とりあえず、検索語入力欄に文章みたいなの入っていたら、それをneural queryにして、単語みたいなのはterm queryにするみたいな感じにすることを考えています。なので、クエリーパーサーの部分にも工夫が必要かなと考えています。

semantic-searchプラグインとしては、そんな感じで、クエリー処理周りをいい感じにするなどを対応していき、ベクトルをどう作るか?はneural-searchプラグインがTorchScriptで処理できるモデルをDJLで読み込んで処理する感じです。そのため、オレオレモデルを作っていくためには、TorchScriptで利用できるようなモデルを作る必要があります。そのうち、この辺も考えていこうかなと思っています。

あとは、雑談的な話としては、Fessもニューラルサーチプラグイン的な感じでも良いかなと思ったのですが、neural searchは日本で商標登録されているので、リスク回避のため、無難にsemantic searchプラグインにしました。

という感じで、セマンティックサーチの機能も地道に改善していければなと思っています。