Fess 構築 (docker)

初めての記事になります。
不足・誤り等ありましたらご指摘下さい。

全文検索OSSであるFessを導入しましたので、備忘録です。
とあるWEBシステム内の検索をするために導入しました。

使用するにあたり設定に苦労しましたので、共有も兼ねています。

## 仮想ホスト環境（参考）
- vagrant + VirtualBox
- Centos7
- HDD 50GB
- Memory 8GB
- docker (19.03.5)
- docker-compose (1.25.2)

# 環境構築
docker上にFessを構築します。
（検証した際は codelibs/fess：13.5.0 で構築しました）

### 1.イメージ取得
下記のように、GitHubから公式リポジトリをcloneして下さい。
`git clone https://github.com/codelibs/docker-fess.git`

### 2.起動
docker-compose で起動して下さい。
Fess + elasticsearch(2台) + kibana が起動されます。
起動タイミングでは elasticsearchだけが落ちる場合がありますが、restartで解決します。
`docker-compose up -d`
`docker-compose restart`

起動後は以下のような構成となります。

```
[root@localhost compose]# docker ps
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                        NAMES
f054fc200d28        codelibs/fess:13.5.0                    "/bin/sh -c /usr/sha…"   2 months ago        Up About a minute   9200/tcp, 9300/tcp, 0.0.0.0:8081->8080/tcp   fess01
60b78d5d0f58        docker.elastic.co/kibana/kibana:7.5.1   "/usr/local/bin/dumb…"   2 months ago        Up About a minute   0.0.0.0:5602->5601/tcp                       kibana
577c9e3abe87        codelibs/fess-elasticsearch:7.5.1       "/usr/local/bin/dock…"   2 months ago        Up About a minute   9300/tcp, 0.0.0.0:9202->9200/tcp             es02
17089688b1f1        codelibs/fess-elasticsearch:7.5.1       "/usr/local/bin/dock…"   2 months ago        Up About a minute   9300/tcp, 0.0.0.0:9201->9200/tcp             es01
```

### 3.確認 / ログイン
http\://localhost:8080 へアクセスして下さい。
検索画面が表示されればOKです。

また、右上のログインから、管理者ログインして下さい。
初期PASSは admin / admin です。

### 4.クロール設定例
クロール → WEB を開きます。

| 項目       | 設定値 |
|:-----------------|:------------------|
| 名前 |web_crawler_test|
| URL |http\://xxx.xxx.xxx.xxx/test/|
| クロール対象とするURL |http\://xxx.xxx.xxx.xxx/test/.*|
| クロール対象から除外するURL |http\://xxx.xxx.xxx.xxx/test_out/.* <br> .\*history.\*|
| 最大アクセス数 | 200000 |
| スレッド数 | 5 |
| 間隔 | 500 |
| ブースト値 | 1.0 |
| 状態 | 有効 |

クロール対象から除外したい場合は、該当パス以下を指定します。
特定の文字が入ったURLだけ除外したい場合は、".* history.*" のように指定しましょう。
対象が非常に多いため、最大アクセス数を20万件にしています。

### 5.スケジューラ設定
システム → スケジューラ を開きます。

初回およびテスト時は、「いますぐ開始」です。
定期的な実施に関しては、「スケジュール」項目だけ設定注意です。
" 分 / 時 / 日 / 月 / 曜日 "　の順で記載します。
例）土曜日の0時に実施したい → 0 0 * * 6

### 6.結果確認
システム情報 → ジョブログ を開きます。

![Screenshot_2020-04-14 Fess ジョブログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602872/bec1c2a5-c23d-73ce-7b86-9286d8a2a332.png)


スケジューラから実行された結果ログが表示されます。
状態欄にOKと表示されていれば完了です。

#### 6-1.（参考）エラー調査
- 対象パスへアクセスできない → ホスト側で名前解決できていませんでした…
- スケジューラが失敗 → elasticsearch が落ちていました…（ちゃんとcurlで確認しましょう）

クラスタの状態は例えば以下のように確認します。

```
[root@localhost compose]# curl http://localhost:9201/_cluster/health?pretty
{
  "cluster_name" : "fess-es",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 91,
  "active_shards" : 182,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
```

#### 6-2.（参考）取得データ0件調査
- クロール対象URLの記載方法が間違っているかも → URLの最後に/(スラッシュ)が抜けていました…

#### 6-3.（参考）文字コード問題
- クロール対象のexcelが文字化けする <br>
　システム → ページのデザイン → ページファイルの表示 → /searchResults.jsp <br>

![Screenshot_2020-04-14 Fess ページのデザイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602872/03238191-11f6-70bc-014d-6b36a778c78b.png)

このファイル内に文字コード変換スクリプトを埋め込みました。
（参考サイト様を失念しましたので、分かり次第追記いたします）

同様に、ファイル名だけ表示したい、リンク短縮したいなどの見栄えも
このファイルを修正すれば変更可能です。

Fessコンテナ内の下記パスに画像ファイルを配置し、
searchResult.jspを変更すればFESSロゴの代わりに、
独自のロゴを設定できたりもします。

```
root@f054fc200d28:/usr/share/fess/app/images# pwd
/usr/share/fess/app/images
root@f054fc200d28:/usr/share/fess/app/images# ls -l
total 56
drwxr-xr-x. 2 fess fess    26 Dec 21 03:38 admin
-rwxr-xr-x. 1 fess fess   506 Dec 21 02:53 blank.png
-rwxr-xr-x. 1 fess fess 12799 Dec 21 02:53 glyphicons-halflings.png
-rwxr-xr-x. 1 fess fess  8777 Dec 21 02:53 glyphicons-halflings-white.png
-rwxr-xr-x. 1 fess fess  5167 Dec 21 02:53 loading.gif
-rwxr-xr-x. 1 fess fess   907 Dec 21 02:53 logo-head.png
-rwxr-xr-x. 1 fess fess  2360 Dec 21 02:53 logo.png
-rwxr-xr-x. 1 fess fess  1529 Dec 21 02:53 logo-top.png
-rwxr-xr-x. 1 fess fess  1469 Dec 21 02:53 noimage.png
```

#### 6-4.（参考）default crawler について
週1回のペースでWEBクロールを行っていましたが、想像以上にディスクリソースを消費するうえにクロールが中々終わらない、という事象が起きたため取り込み直したのち default crawler を無効化しました。

下記画像のように、ダッシュボードから DELETE INDEX を選択することで
データが消えますので、再度取り込み直すこともできます。

![Screenshot_2020-04-14 Fess システム構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602872/5ca79b49-6e87-9219-d07e-2851feca2138.png)

過去資料の検索目的だけでしたので、断面として残しています。
default crawler を定期的に実行する場合は負荷にご注意下さい。