🔍

Fessでエクセル設計書の中を検索しよう!~導入編~

2024/02/23に公開

概要

この記事では、全文検索サーバーFessを導入するための方法を説明します。

利用方法については次記事である基本編を参考にしてください。
基本編では「Fessでファイルを読み込む」から「実際に検索をする」までの説明をしています。
https://zenn.dev/0_0/articles/21df248f85759c

タイトルではエクセル設計書をあげていますが、通常のテキストファイルや他のオフィス文書ファイル、そしてPDFなど扱える内容は多いのでエクセル設計書に限らずにお読みください。

経緯

エクセル設計書、とても便利ですよね。

なーんていうと、エクセル設計書に翻弄された経験のある方々は「いやいやいや」とツッコミをしたくなるかもしれません。
かくいう私もエクセル設計書に親こそ殺されていませんが、悩まされたことがないわけではありません。

シートをまたいだ数式や条件付き書式を使うと、すぐコピペで壊す人がいる。
Diff(ファイル差分)をとるのはコツがいる。
そして、複数ファイルをまたいだ検索はしにくい。

ええ、本当にいろんなことに悩まされました。

とはいえ、大抵の端末にオフィスソフトが用意されているのはもはや当たり前。
それが故に、環境を選ばず、だれにでも扱いやすく、プロジェクトや他社を含めた連携が非常に容易なのは間違いなく、それが他のツールの追随を許さない決定的な理由でもあります。
そもそも設計書自体を納品する、というのもよくある話ですので「自社でしか使えないWikiシステムに登録」なんてこともまずありえません。(それ以外の社内向けの体裁を気にしないノウハウはエクセルから脱却させたりしましたが)

https://neos21.net/blog/2019/10/07-01.html
こちらの記事でもあげられていますが、エクセル設計書がめんどくさくなってしまう原因は、そのエクセル設計書の扱い方が悪いことが主です。
数式や条件付き書式が壊れてしまうのも、他のブックからコピペが必要になるような管理方法になっているのがそもそも間違い(ファイルの編集競合が主なのだと思います)でしょうし、DiffについてはWinMergeの標準搭載のエクセル比較プラグインが非常に便利です。
他のツールに移行する際に運用を統一できるなら、エクセル設計書の運用を見直すのも似たり寄ったりなんですよね。
https://tech.robotpayment.co.jp/entry/2023/03/23/070000

ですが使い方を見直したところで解決しにくい問題があります。
エクセル設計書の保存されているフォルダ全体から、特定のワードを検索することです。

すべての現場がそうであるのかはわかりかねますが、検索ツールにサクラエディタのGrep検索を使用している方は多いでしょう。
このGrep検索機能はかなり高速、軽量でフォルダ内を走破してくれますが、バイナリファイルであるエクセル設計書のセルの中までは検索してくれません。
他にも、複数のエクセルをまとめて検索してくれるマクロとかアプリケーションとか存在していますが、検索速度にしても使いやすさにしても、いまいち実用に足る性能が満たせている気がしません。

「エクセル設計書を扱う以上、こんなものなんだ」と半ばあきらめていたが、ある日、別記事(今後掲載予定)のためにツールを調べていると、サーバーにあらかじめファイルを検索するためのインデックスを作成しておけば、Google検索かのように一瞬で検索させることが可能なのだとしりました。

それが今回扱う、全文検索サーバーFessです。

ターゲット

  • エクセルなどのオフィス文書やPDFなどの文書ファイルから検索をしたい人
  • Google検索のような検索エンジンを作りたい人

ゴール

全体のゴール

  • エクセルの中も検索できるようにする

今回記事のゴール

  • Fessをインストールする

用意するもの

  • Fess
    今回は「Fess 14.11.1」を使用しています。
    移行の手順は公式のドキュメントにはわかりにくい点も多いので、注意が必要です
  • JDK Development Kit 17.0.10
    バージョンは17のみを扱う(Java21では正常に動作しなかった)
    今回はOracle JDKを説明に使用。「JDK 17」と「Windows」を選択してからダウンロード。

    Amazon Corretto 17など他のJDKでも問題ないとは思います。

Fessをインストールする

さっそくFessをインストールしてみましょう。

今回のインストール方法は簡単にインストールするために用意されているWindowsバッチを使用することを想定しており、実際には付属のApatchとTomcatで実行しているだけです。
なのでLinuxなどでもバッチを参考に実行することが可能です。
下記のドキュメントはバージョンが古いものなのですが参考になります。
https://github.com/codelibs/fess-docs/blob/master/ja/9.4/config/install-on-tomcat.rst

また、今回の手順では「用意されているWindowsバッチ」のクセを修正しながらインストールする手順を紹介しています。
「ややこしいな」と思った方は、公式の手順の方も参考にしてみてくださいね。
https://fess.codelibs.org/ja/14.11/install/install.html

Fessを展開する

Fessをダウンロードします。
GitHubなのでReleasesから最新のFessを入手することができます。
https://github.com/codelibs/fess/releases

ダウンロードしたファイルはFessをインストールしたいフォルダで展開しましょう。
私は図のような配置をしました。

フォルダ配置
📂 . (例:D:\service\fess)
├── 📂fess-xx.xx.x ←解凍したFessのフォルダ
│  ├ 📂app
│  │ └ 📂WEB-INF
│  │   └ 📂classes
│  │      └ fess_config.properties
│  ├ 📂bin
│  │ ├ fess.in.bat
│  │ └ service.bat
│  └ 📂logs
│
└── (ここには操作するバッチなどを置く予定)

binやlogsのほかにもフォルダがありますが、今回は参照しないので割愛しています。

Fessの設定を変更する(ために改造する)

FessはWebアプリケーションなので、ポート番号やコンテキストパスなどが競合しないように設定をいじる必要があります。

該当箇所はFESS_JAVA_OPTSで検索すると見つかると思います。

.\fess-xx.xx.x\bin\fess.in.bat の一部
set FESS_CLASSPATH=%FESS_HOME%\lib\classes
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Des-foreground=yes
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.home="%FESS_HOME%"
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.es.dir="%SEARCH_ENGINE_HOME%"
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.context.path=/
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.port=8080
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.webapp.path=%FESS_HOME%\app
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.temp.path=%FESS_HOME%\temp
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.log.name=%APP_NAME%
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.log.path=%FESS_HOME%\logs
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.log.level=warn
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dlasta.env=web
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dtomcat.config.path=tomcat_config.properties

……なんですがこのオプションの羅列、なぜだか先ほどのservice.bat内でも%FESS_PARAMS%として定義されています。

.\fess-xx.xx.x\bin\service.bat の一部
set FESS_PARAMS=-Dfess;-Dfess.home="%FESS_HOME%";-Dfess.es.dir="%SEARCH_ENGINE_HOME%";-Dfess.home="%FESS_HOME%";-Dfess.context.path="/";-Dfess.port=8080;-Dfess.webapp.path="%FESS_HOME%\app";-Dfess.temp.path="%FESS_HOME%\temp";-Dfess.log.name="%APP_NAME%";-Dfess.log.path="%FESS_HOME%\logs";-Dfess.log.level=warn;-Dlasta.env=web;-Dtomcat.config.path=tomcat_config.properties

このふたつの変数は先ほど修正した//IS//のオプション、--JvmOptions++JvmOptionsでそれぞれ参照しています。(%FESS_JAVA_OPTS%は前処理で変数%JVM_OPTS%に置換されています)

Fess 14.11.1では160行目、他のバージョンでも//IS//で検索すると見つかると思います。

.\fess-xx.xx.x\bin\service.bat の一部
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %FESS_START_TYPE% --StopTimeout %FESS_STOP_TIMEOUT% --StartClass org.codelibs.fess.FessBoot --StopClass org.codelibs.fess.FessBoot --StartMethod main --StopMethod shutdown --Classpath "%FESS_CLASSPATH%" --JvmSs %JVM_SS% --JvmMs %JVM_XMS% --JvmMx %JVM_XMX% --JvmOptions %JVM_OPTS% ++JvmOptions %FESS_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%%JAVA_HOME%%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%FESS_HOME%" %SERVICE_PARAMS% ++StartParams start

ちょっと読みにくいので改行を含めた書き方に整形するとこんな感じです。

.\fess-xx.xx.x\bin\service.bat の一部(見やすく整形)
"%EXECUTABLE%" //IS//%SERVICE_ID% ^
  --Startup %FESS_START_TYPE% ^
  --StopTimeout %FESS_STOP_TIMEOUT% ^
  --StartClass org.codelibs.fess.FessBoot ^
  --StopClass org.codelibs.fess.FessBoot ^
  --StartMethod main ^
  --StopMethod shutdown ^
  --Classpath "%FESS_CLASSPATH%" ^
  --JvmSs %JVM_SS% ^
  --JvmMs %JVM_XMS% ^
  --JvmMx %JVM_XMX% ^
  --JvmOptions %JVM_OPTS% ^
  ++JvmOptions %FESS_PARAMS% ^
  %LOG_OPTS% ^
  --PidFile "%SERVICE_ID%.pid" ^
  --DisplayName "%SERVICE_DISPLAY_NAME%" ^
  --Description "%SERVICE_DESCRIPTION%" ^
  --Jvm "%%JAVA_HOME%%%JVM_DLL%" ^
  --StartMode jvm ^
  --StopMode jvm ^
  --StartPath "%FESS_HOME%" ^
  %SERVICE_PARAMS% ^
  ++StartParams start

--JvmOptions++JvmOptionsの違いは、--JvmOptionsで設定したオプションを++JvmOptionsで上書きするというものです。

https://tomcat.apache.org/tomcat-10.1-doc/windows-service-howto.html#Command_line_parameters

標準の設定の違いは次の通り。

設定キー fess.in.batの設定値(%FESS_JAVA_OPTS% service.batの設定値(%FESS_PARAMS% 備考
-Dfess (定義あり) (定義あり)
-Des-foreground yes 未定義
-Dfess.home "%FESS_HOME%" "%FESS_HOME%" %FESS_PARAMS%では2回定義されている
-Dfess.es.dir "%SEARCH_ENGINE_HOME%" "%SEARCH_ENGINE_HOME%"
-Dfess.context.path / "/"
-Dfess.port 8080 8080
-Dfess.webapp.path %FESS_HOME%\app "%FESS_HOME%\app"
-Dfess.temp.path %FESS_HOME%\temp "%FESS_HOME%\temp"
-Dfess.log.name %APP_NAME% "%APP_NAME%"
-Dfess.log.path %FESS_HOME%\logs "%FESS_HOME%\logs"
-Dfess.log.level warn warn
-Dlasta.env web web
-Dtomcat.config.path tomcat_config.properties tomcat_config.properties

囲み文字(ダブルクォーテーション)があるかないかの違いはありますが、概ね設定自体は一緒です。
であれば考えられるのは、--JvmOptions++JvmOptionsで参照すべき変数が間違っています。

公式の設定手順では「どっちも設定値を修正してくださいね」と案内されていますが、そういう問題じゃありません。
https://fess.codelibs.org/ja/14.11/config/system.html

まぁ%FESS_PARAMS%-Dfess.homeでは、%FESS_PARAMS%の中でも同じ定義を2回定義していたのでそもそもFess開発元自体が「このバッチでサービス登録するのは開発段階だけだ、本番環境は資産を自前のTomcatなどにデプロイするだろう」と見限っているのかもしれません。

閑話休題。

とにかく、service.batの修正が必要です。
--JvmOptions++JvmOptionsで参照する変数を逆にしましょう。

.\fess-xx.xx.x\bin\service.bat の一部を修正
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %FESS_START_TYPE% --StopTimeout %FESS_STOP_TIMEOUT% --StartClass org.codelibs.fess.FessBoot --StopClass org.codelibs.fess.FessBoot --StartMethod main --StopMethod shutdown --Classpath "%FESS_CLASSPATH%" --JvmSs %JVM_SS% --JvmMs %JVM_XMS% --JvmMx %JVM_XMX% --JvmOptions %FESS_PARAMS% ++JvmOptions %JVM_OPTS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%%JAVA_HOME%%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%FESS_HOME%" %SERVICE_PARAMS% ++StartParams start
.\fess-xx.xx.x\bin\service.bat の一部を修正(整形版)
"%EXECUTABLE%" //IS//%SERVICE_ID% ^
  --Startup %FESS_START_TYPE% ^
  --StopTimeout %FESS_STOP_TIMEOUT% ^
  --StartClass org.codelibs.fess.FessBoot ^
  --StopClass org.codelibs.fess.FessBoot ^
  --StartMethod main ^
  --StopMethod shutdown ^
  --Classpath "%FESS_CLASSPATH%" ^
  --JvmSs %JVM_SS% ^
  --JvmMs %JVM_XMS% ^
  --JvmMx %JVM_XMX% ^
-  --JvmOptions %JVM_OPTS% ^
-  ++JvmOptions %FESS_PARAMS% ^
+  --JvmOptions %FESS_PARAMS% ^
+  ++JvmOptions %JVM_OPTS% ^
  %LOG_OPTS% ^
  --PidFile "%SERVICE_ID%.pid" ^
  --DisplayName "%SERVICE_DISPLAY_NAME%" ^
  --Description "%SERVICE_DESCRIPTION%" ^
  --Jvm "%%JAVA_HOME%%%JVM_DLL%" ^
  --StartMode jvm ^
  --StopMode jvm ^
  --StartPath "%FESS_HOME%" ^
  %SERVICE_PARAMS% ^
  ++StartParams start

これでfess.in.batの設定が優先されるようになります。お好みの設定に変更しましょう。
ない設定は、service.batの%FESS_PARAMS%の設定が優先されますので注釈化しても問題ありません。

fess.in.batを設定変更する例
set FESS_CLASSPATH=%FESS_HOME%\lib\classes
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Des-foreground=yes
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.home="%FESS_HOME%"
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.es.dir="%SEARCH_ENGINE_HOME%"
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.context.path=/
- set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.port=8080
+ rem set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.port=8080
+ set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.port=8081
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.webapp.path=%FESS_HOME%\app
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.temp.path=%FESS_HOME%\temp
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.log.name=%APP_NAME%
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.log.path=%FESS_HOME%\logs
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.log.level=warn
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dlasta.env=web
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dtomcat.config.path=tomcat_config.properties

JVMを指定する(ために改造する)

不具合ではないのですが、Fessには私にとっての不都合があります。
システム環境変数のJAVA_HOMEを参照していることです。

Fessは現在Java 17(JDK 17)じゃなければ実行できません。
しかし、並行しているシステムはJava 17にはないJava EE(javax)のクラスを参照していることがあるので安易にJava 17に変更すると問題が発生する可能性があります。
https://news.mynavi.jp/techplus/article/20180228-590488/
そうでなくとも今はすでにJava 21という安定盤が存在し、Fessは今のところJava 21で実行できません。(Issueを確認するとfess 15.0にて対応しようとしている軌跡が見えるため、いずれは対応するものだとは思います)
https://github.com/codelibs/fess/issues/2789

よって、バージョンアップに影響しないようにシステム環境変数のJAVA_HOMEを参照せず、直接JDKを指定したいのです。

Fessの起動方法の修正

しかし、現状のFessでは「無理やりにでもJAVA_HOMEを参照しようとする」記載がサービスのインストールバッチにあるため、そこを修正する必要があります。

.\fess-xx.xx.x\bin\service.bat の一部
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %FESS_START_TYPE% --StopTimeout %FESS_STOP_TIMEOUT% --StartClass org.codelibs.fess.FessBoot --StopClass org.codelibs.fess.FessBoot --StartMethod main --StopMethod shutdown --Classpath "%FESS_CLASSPATH%" --JvmSs %JVM_SS% --JvmMs %JVM_XMS% --JvmMx %JVM_XMX% --JvmOptions %FESS_PARAMS% ++JvmOptions %JVM_OPTS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%%JAVA_HOME%%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%FESS_HOME%" %SERVICE_PARAMS% ++StartParams start
.\fess-xx.xx.x\bin\service.bat の一部(整形版)
"%EXECUTABLE%" //IS//%SERVICE_ID% ^
  --Startup %FESS_START_TYPE% ^
  --StopTimeout %FESS_STOP_TIMEOUT% ^
  --StartClass org.codelibs.fess.FessBoot ^
  --StopClass org.codelibs.fess.FessBoot ^
  --StartMethod main ^
  --StopMethod shutdown ^
  --Classpath "%FESS_CLASSPATH%" ^
  --JvmSs %JVM_SS% ^
  --JvmMs %JVM_XMS% ^
  --JvmMx %JVM_XMX% ^
  --JvmOptions %FESS_PARAMS% ^
  ++JvmOptions %JVM_OPTS% ^
  %LOG_OPTS% ^
  --PidFile "%SERVICE_ID%.pid" ^
  --DisplayName "%SERVICE_DISPLAY_NAME%" ^
  --Description "%SERVICE_DESCRIPTION%" ^
  --Jvm "%%JAVA_HOME%%%JVM_DLL%" ^
  --StartMode jvm ^
  --StopMode jvm ^
  --StartPath "%FESS_HOME%" ^
  %SERVICE_PARAMS% ^
  ++StartParams start

--Jvmオプションが"%%JAVA_HOME%%%JVM_DLL%"となっています。
これだとバッチの先頭でset %JAVA_HOME%と定義したとしても、定義したJAVA_HOMEを参照はしてくれません。
思い切って"%JAVA_HOME%%JVM_DLL%"と修正してしまいましょう。

.\fess-xx.xx.x\bin\service.bat の一部を修正
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %FESS_START_TYPE% --StopTimeout %FESS_STOP_TIMEOUT% --StartClass org.codelibs.fess.FessBoot --StopClass org.codelibs.fess.FessBoot --StartMethod main --StopMethod shutdown --Classpath "%FESS_CLASSPATH%" --JvmSs %JVM_SS% --JvmMs %JVM_XMS% --JvmMx %JVM_XMX% --JvmOptions %FESS_PARAMS% ++JvmOptions %JVM_OPTS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%JAVA_HOME%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%FESS_HOME%" %SERVICE_PARAMS% ++StartParams start
.\fess-xx.xx.x\bin\service.bat の一部を修正(整形版)
"%EXECUTABLE%" //IS//%SERVICE_ID% ^
  --Startup %FESS_START_TYPE% ^
  --StopTimeout %FESS_STOP_TIMEOUT% ^
  --StartClass org.codelibs.fess.FessBoot ^
  --StopClass org.codelibs.fess.FessBoot ^
  --StartMethod main ^
  --StopMethod shutdown ^
  --Classpath "%FESS_CLASSPATH%" ^
  --JvmSs %JVM_SS% ^
  --JvmMs %JVM_XMS% ^
  --JvmMx %JVM_XMX% ^
  --JvmOptions %FESS_PARAMS% ^
  ++JvmOptions %JVM_OPTS% ^
  %LOG_OPTS% ^
  --PidFile "%SERVICE_ID%.pid" ^
  --DisplayName "%SERVICE_DISPLAY_NAME%" ^
  --Description "%SERVICE_DESCRIPTION%" ^
-  --Jvm "%%JAVA_HOME%%%JVM_DLL%" ^
+  --Jvm "%JAVA_HOME%%JVM_DLL%" ^
  --StartMode jvm ^
  --StopMode jvm ^
  --StartPath "%FESS_HOME%" ^
  %SERVICE_PARAMS% ^
  ++StartParams start

当然、インストールしたFessが更新されればこの問題は元に戻ってしまうので、都度修正の必要があるかと思います。

Fessのプロパティファイルの修正

さてここまでは、設定はFessを起動するためのものでした。
しかし実際にはFessが検索するためのインデックスを作る処理は、別のJava参照があります。

……いや、なんでわけたの???

疑問に思っていても仕方がないですし、そもそもFessは検索画面と検索のインデックスを作る処理を分離できるようなので、その辺のむつかしい話が理由なんだと考えておきましょう、うん。

変更すべき設定は.\fess-xx.xx.x\app\WEB-INF\classes\fess_config.propertiesにあります。
java.command.pathを検索してみてください。

fess_config.propertiesの一部
# job
job.system.job.ids=default_crawler
job.template.title.web=Web Crawler - {0}
job.template.title.file=File Crawler - {0}
job.template.title.data=Data Crawler - {0}
job.template.script=return container.getComponent("crawlJob").logLevel("info").sessionId("{3}").webConfigIds([{0}] as String[]).fileConfigIds([{1}] as String[]).dataConfigIds([{2}] as String[]).jobExecutor(executor).execute();
job.max.crawler.processes=0
job.default.script=groovy

processors=0
java.command.path=java
python.command.path=python

すでにpythonも嫌な予感はしますが、この辺はインデックスを作成するための処理を作る画面のフォームの初期値や、その処理の仕方を設定するプロパティです。
このjavaという値がアプリケーションのルートフォルダ(標準だと.\fess-xx.xx.x\app)直下にあるJava.exeを探してしまっています。
システム環境変数を設定している場合は、他のコマンド同様PATHを一緒に参照しに行くため問題は生じません。
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/path

java.command.pathにjava.exeまでのパスを通しましょう。
この時、区切り文字は\\である必要があります。円記号(バックスラッシュ)の数に注意してください。

fess_config.propertiesの一部を修正
# job
job.system.job.ids=default_crawler
job.template.title.web=Web Crawler - {0}
job.template.title.file=File Crawler - {0}
job.template.title.data=Data Crawler - {0}
job.template.script=return container.getComponent("crawlJob").logLevel("info").sessionId("{3}").webConfigIds([{0}] as String[]).fileConfigIds([{1}] as String[]).dataConfigIds([{2}] as String[]).jobExecutor(executor).execute();
job.max.crawler.processes=0
job.default.script=groovy

processors=0
- java.command.path=java
+ java.command.path=C:\\Program Files\\Java\\jdk-17.0.10\\bin\\java.exe
python.command.path=python

サービスのインストールバッチを用意する

Fessを展開したフォルダ(📂 .)にサービスのインストールバッチ、そしてアンインストールバッチをつくっていきましょう。
service.batに引数を渡すことで、サービスのインストール、アンインストールは実行できます。

インストールバッチ

文字コードはShift_JISを指定して作成してください。

install.bat
@echo off
pushd %~dp0\fess-xx.xx.x\bin\
setlocal

rem 任意のJavaインストールフォルダを設定する
rem システム環境変数のJAVA_HOMEを使用する場合は次の行を注釈化
set JAVA_HOME=C:\Program Files\Java\jdk-17.0.10

.\service.bat install

endlocal
popd
exit /b

アンインストールバッチ

文字コードはShift_JISを指定して作成してください。

uninstall.bat
@echo off
pushd %~dp0\fess-xx.xx.x\bin\
setlocal

rem 任意のJavaインストールフォルダを設定する
rem システム環境変数のJAVA_HOMEを使用する場合は次の行を注釈化
set JAVA_HOME=C:\Program Files\Java\jdk-17.0.10

.\service.bat remove

endlocal
popd
exit /b

サービスをインストールする

用意したインストールバッチ(install.bat)を実行しましょう。

処理が完了した後、サービスを開くと「Fess (fess-service-x64)」が登録されていることが確認できます。

「サービスの開始」を実行し、サービスが正常に起動していることを確認しましょう。

その後、fess.in.batに設定したURL(コンテキストパスとポート番号)を参照し、検索画面が表示されればインストールは完了です。

ログインしてみる

現状ではなにも設定されていませんので、検索をしても何もヒットしません。
詳細な設定は、記事が長くなったため次回に回すとして、Fessへのログインだけしてみましょう。

まずは画面右上の「ログイン」を押下します。

ログインフォームが開いたらユーザー名、パスワードを入力します。
初期ユーザー名は「admin」、初期パスワードは「admin」です。

初期ユーザー名、初期パスワードでログインするとパスワードの更新を促されるので変更します。

「パスワードを更新しました」と表示されたら「戻る」を押下します。

右上にユーザー名「admin」が表示されていればログインが成功しています。

そのほかについて

サービスのアンインストールについて

fess.in.batの設定を変更する場合には一度、サービスをアンインストールする必要があります。
用意したアンインストールバッチ(uninstall.bat)を実行し、サービスが消えたことを確認できればアンインストール完了です。

設定を変更し、再度インストールバッチ(install.bat)を実行しましょう。

右上の⚠はなに?

今回の手順でインストールした場合、Fessの検索画面の右上に警告マーク⚠が表示されます。
これは手順上でOpenSearchの設定をしていないためです。

FessはOpenSearchの機能を利用して検索することができるのですが、そもそもFessにOpenSearchは内蔵されています。
したがって個人利用、および簡単な検索をする程度ならば気にする必要はなく、処理速度重視、ないし多くの負荷がかかる本番環境では負荷分散のために別途インストールが必要だという警告です。

したがって今回は個人利用、あるいは小規模なプロジェクトメンバーで利用することを念頭にしているため考慮していませんし、消えることはありません。

⚠が気になる方、本番環境相当のセットアップをしたい方は、公式のインストール手順を参考にしてOpenSearchをインストールしてください。
https://fess.codelibs.org/ja/14.11/install/install.html

ですがぶっちゃけ、利用者が少人数であるかぎりこの設定は不要だと思われます。

次回、検索ができるようにFessの設定をします!

思った以上に導入の手順が長くなってしまったので、実際に検索できるようにする設定は次回に分割しようと思います。
https://zenn.dev/0_0/articles/21df248f85759c

Discussion