Windows OS への Fess + 外部 Elasticsearch 導入手順

Fess 公式サイトで配布されている ZIP パッケージは Elasticsearch が同梱されている為、ファイル展開後に即 Fess を利用できる。しかし、組込 Elasticsearch での本番運用は推奨されておらず、下記のように管理画面に注意喚起が表示されてしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/8314af87-059c-7ddb-efda-7232ae81206a.png)
その為、別途 Elasticsearch の導入が必要である。

# 環境情報
- Windows10 Pro 64bit
- Java SE Development Kit 11.0.10
- Fess 13.9.3
- Elasticsearch 7.9.3
  - elasticsearch-analysis-fess 7.9.0
  - elasticsearch-analysis-extension 7.9.1
  - elasticsearch-configsync 7.9.0
  - elasticsearch-dataformat 7.9.0
  - elasticsearch-minhash 7.9.1

Fess と Elasticsearch のバージョンは下記の動作確認済の組み合わせを使用する。
https://fess.codelibs.org/ja/downloads.html

## 補足
当初、何も考えず最新の `JDK 15.0.2` をインストールしていた為、Fess 起動時にエラーが発生した。
Fess のインストール要件は `Java 11` である点に注意が必要。
https://fess.codelibs.org/ja/13.9/install/install.html

以下が `fess.bat` 実行時に発生したエラーの一例。

```text
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
        at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)
        at org.codehaus.groovy.reflection.GroovyClassValueFactory.<clinit>(GroovyClassValueFactory.java:35)
        at org.codehaus.groovy.reflection.ClassInfo.<clinit>(ClassInfo.java:107)
        at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
        at org.codehaus.groovy.reflection.ReflectionCache.<clinit>(ReflectionCache.java:39)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:210)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:108)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:86)
        at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
        at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:86)
        at groovy.lang.GroovyObjectSupport.getDefaultMetaClass(GroovyObjectSupport.java:59)
        at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
        at groovy.lang.Binding.<init>(Binding.java:36)
        at org.codelibs.fess.util.GroovyUtil.evaluate(GroovyUtil.java:40)
        at org.codelibs.fess.job.impl.GroovyExecutor.execute(GroovyExecutor.java:31)
        at org.codelibs.fess.app.job.ScriptExecutorJob.run(ScriptExecutorJob.java:91)
        at org.lastaflute.job.LaJobRunner.actuallyRun(LaJobRunner.java:265)
        at org.lastaflute.job.LaJobRunner.doRun(LaJobRunner.java:232)
        at org.lastaflute.job.LaJobRunner.run(LaJobRunner.java:182)
        at org.lastaflute.job.cron4j.Cron4jTask.runJob(Cron4jTask.java:371)
        at org.lastaflute.job.cron4j.Cron4jTask.actuallyExecute(Cron4jTask.java:355)
        at org.lastaflute.job.cron4j.Cron4jTask.lambda$doExecute$6(Cron4jTask.java:258)
        at org.lastaflute.job.cron4j.Cron4jTask.synchronizedNeighborRunning(Cron4jTask.java:328)
        at org.lastaflute.job.cron4j.Cron4jTask.doExecute(Cron4jTask.java:246)
        at org.lastaflute.job.cron4j.Cron4jTask.execute(Cron4jTask.java:151)
        at it.sauronsoftware.cron4j.RomanticCron4jNativeTaskExecutor$RomanticRunner.run(RomanticCron4jNativeTaskExecutor.java:121)
        at java.base/java.lang.Thread.run(Thread.java:832)
```

# JDK 導入

## JDK のインストール
https://www.oracle.com/jp/java/technologies/javase-jdk11-downloads.html

> Windows x64 Installer
jdk-11.0.10_windows-x64_bin.exe

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/d31c089e-1adf-ca39-f000-58e38c7b2292.png)



## 環境変数・パスの設定
コントロールパネル　>　システム　>　システムの詳細設定　>　環境変数

以下の内容で新規環境変数 `JAVA_HOME` を登録する。その後、環境変数 `Path` へ `%JAVA_HOME%\bin` を追記する。

|変数名|変数値|
|---|---|
|JAVA_HOME|C:\Program Files\Java\jdk-11.0.10|

# Elasticsearch 導入

## Elasticsearch のインストール
https://www.elastic.co/jp/downloads/past-releases/elasticsearch-7-9-3
> elasticsearch-7.9.3-windows-x86_64.zip

`C:\elasticsearch-7.9.3` に展開。

## プラグインのインストール

以下のプラグインをコマンドプロンプトからインストールする。

- elasticsearch-analysis-fess
- elasticsearch-analysis-extension
- elasticsearch-configsync
- elasticsearch-dataformat
- elasticsearch-minhash

プラグインのバージョン指定は以下を参照。
https://fess.codelibs.org/ja/13.9/install/install.html

```bash:
C:/elasticsearch-7.9.3/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:7.9.0
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/3c83a13e-ffbd-e680-5d46-235d83562607.png)

```
C:/elasticsearch-7.9.3/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:7.9.1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/e5668890-2189-bbdb-e2e4-cbed9408d111.png)

```
C:/elasticsearch-7.9.3/bin/elasticsearch-plugin install org.codelibs:elasticsearch-configsync:7.9.0
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/96dc0205-9817-38aa-9147-f6f905a4ec89.png)

```
C:/elasticsearch-7.9.3/bin/elasticsearch-plugin install org.codelibs:elasticsearch-dataformat:7.9.0
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/a6d8f6ff-6405-5746-03d7-b35016b3cba8.png)

```
C:/elasticsearch-7.9.3/bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:7.9.1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/2ef83347-3952-dbf9-a145-fea18c94db7c.png)

## 設定の追加

```elasticsearch-7.9.3\config\elasticsearch.yml
configsync.config_path: C:/elasticsearch-7.9.3/config/
```

# Fess 導入

## Fess のインストール
https://github.com/codelibs/fess/releases/tag/fess-13.9.3
> fess-13.9.3.zip

`C:\fess-13.9.3` に展開。

## 設定の変更
118行目のコメントアウト（REM）を解除する。

```fess-13.9.3\bin\fess.in.bat
REM External elasticsearch cluster
REM set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.es.http_address=http://localhost:9200
REM set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.dictionary.path=%ES_HOME%/config/
```

　↓ 変更

```fess-13.9.3\bin\fess.in.bat
REM External elasticsearch cluster
set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.es.http_address=http://localhost:9200
REM set FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.dictionary.path=%ES_HOME%/config/
```

# 起動
Elasticsearch ⇒ Fess の順に起動する。

## Elasticsearch の起動と確認
`C:\elasticsearch-7.9.3\bin\elasticsearch.bat` を実行する。

```text
略
[2021-01-21T10:02:21,286][INFO ][o.e.n.Node                 ] [hoge] started
[2021-01-21T10:02:29,003][INFO ][o.e.c.r.a.AllocationService] [hoge] Cluster health status changed from [RED] to [GREEN] (reason: [shards started [[.configsync][0]]]).
[2021-01-21T10:02:29,061][INFO ][o.c.e.c.s.ConfigSyncService] [hoge] ConfigFileUpdater is started at 1m intervals.
```

Elasticsearch 起動状態の確認
http://localhost:9200/

```json
{
  "name": "hoge",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "hoge",
  "version": {
    "number": "7.9.3",
    "build_flavor": "default",
    "build_type": "zip",
    "build_hash": "hoge",
    "build_date": "2020-10-16T10:36:16.141335Z",
    "build_snapshot": false,
    "lucene_version": "8.6.2",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
  },
  "tagline": "You Know, for Search"
}
```

Elasticsearch プラグイン導入状態の確認
http://localhost:9200/_cat/plugins?v&s=component&h=name,component,version,description&pretty

```
name component          version description
hoge analysis-extension 7.9.1   This plugin provides an analysis library.
hoge analysis-fess      7.9.0   FessAnalysis Plugin for Elasticsearch
hoge configsync         7.9.0   ConfigSync plugin syncs up with configuration files in .configsync index.
hoge dataformat         7.9.0   This plugin provides several response formats.
hoge minhash            7.9.1   This plugin provides b-bit minhash algorism.
```

## Fess の起動と確認
`C:\fess-13.9.3\bin\fess.bat` を実行する。

http://localhost:8080/
![localhost_8080_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243093/0a73bc57-876a-dd61-3db3-a9fd5a19465e.png)
Fess 検索画面が表示されることを確認する。

# 参考
https://qiita.com/RoG/items/10563df2fc40999d2367
https://news.mynavi.jp/itsearch/article/bizapp/4320