windowsPCで、Docker上にFessサーバを構築してみた。エラー処理編

## はじめに
Fessを構築してクロールしました。そこで管理画面から障害URLを見てみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/744b4695-8aea-8200-b011-8c287011c79c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/ef1f0010-9ff8-84dd-60fd-1c1f373bfb08.png)

ここに書かれたものはインデックス付けに失敗しており、Fessの検索結果一覧に表示されないものとなります。
当然、検索したいものもエラーの中に含まれていると思いますのでそれらの障害URLを解消させる方法をお教えします。

## もくじ エラーの種類
■拡張子.pptxの検索結果がファイル名ではなく、タイトル名で表示される。
■java.lang.OutOfMemoryError: Java heap space
■1gb以上のファイルをクロールさせる方法
■@がついているファイルやディレクトリがクロール失敗する。
■クロールしたインデックス情報が喪失する。
## 拡張子.pptxの検索結果がファイル名ではなく、タイトル名で表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/d766bb17-626c-4ee5-20b4-2a801a2cab20.png)
Fessでpptxファイルを検索すると、検索結果にはファイル名ではなくタイトル名で表示されます。

画像の例だと[PowerPointプレゼンテーション]と表示されます。
Fessを使うユーザーはファイル名で検索をかける人もいるので、検索結果はファイル名で表示させたい。

コマンドプロンプト起動
```
docker exec -it fess01 /bin/bash
```
dockerの上で稼働しているfess01コンテナの中に入ります。
設定ファイルの場所を検索します。
fess_config.propertiesというファイルを編集したいのでコマンドプロンプトで探してもらいます。
```
find / -name "fess_config.properties"
```
おそらくCtrl+Vで貼り付けできません。コンテナの中はlinuxになっているので、Ctrl+Shift+Vで貼り付けます。
```
root@392d5242745d:/usr/share/fess# find / -name "fess_config.properties"
find: ‘/proc/36/task/36/fdinfo’: Permission denied
find: ‘/proc/36/task/37/fdinfo’: Permission denied
find: ‘/proc/36/task/38/fdinfo’: Permission denied
find: ‘/proc/36/task/39/fdinfo’: Permission denied
find: ‘/proc/36/task/40/fdinfo’: Permission denied
find: ‘/proc/36/task/41/fdinfo’: Permission denied
find: ‘/proc/36/task/42/fdinfo’: Permission denied
find: ‘/proc/36/task/43/fdinfo’: Permission denied
find: ‘/proc/36/task/44/fdinfo’: Permission denied
find: ‘/proc/36/task/45/fdinfo’: Permission denied
find: ‘/proc/36/task/46/fdinfo’: Permission denied
find: ‘/proc/36/task/47/fdinfo’: Permission denied
find: ‘/proc/36/task/48/fdinfo’: Permission denied
find: ‘/proc/36/task/49/fdinfo’: Permission denied
find: ‘/proc/36/task/50/fdinfo’: Permission denied
find: ‘/proc/36/task/51/fdinfo’: Permission denied
find: ‘/proc/36/task/52/fdinfo’: Permission denied
find: ‘/proc/36/task/53/fdinfo’: Permission denied
find: ‘/proc/36/task/54/fdinfo’: Permission denied
find: ‘/proc/36/task/61/fdinfo’: Permission denied
find: ‘/proc/36/task/62/fdinfo’: Permission denied
find: ‘/proc/36/task/63/fdinfo’: Permission denied
find: ‘/proc/36/task/64/fdinfo’: Permission denied
find: ‘/proc/36/task/65/fdinfo’: Permission denied
find: ‘/proc/36/task/66/fdinfo’: Permission denied
find: ‘/proc/36/task/67/fdinfo’: Permission denied
find: ‘/proc/36/task/68/fdinfo’: Permission denied
find: ‘/proc/36/task/69/fdinfo’: Permission denied
find: ‘/proc/36/task/70/fdinfo’: Permission denied
find: ‘/proc/36/task/71/fdinfo’: Permission denied
find: ‘/proc/36/task/79/fdinfo’: Permission denied
find: ‘/proc/36/task/80/fdinfo’: Permission denied
find: ‘/proc/36/task/83/fdinfo’: Permission denied
find: ‘/proc/36/task/84/fdinfo’: Permission denied
find: ‘/proc/36/task/85/fdinfo’: Permission denied
find: ‘/proc/36/task/86/fdinfo’: Permission denied
find: ‘/proc/36/task/94/fdinfo’: Permission denied
find: ‘/proc/36/task/95/fdinfo’: Permission denied
find: ‘/proc/36/task/102/fdinfo’: Permission denied
find: ‘/proc/36/task/106/fdinfo’: Permission denied
find: ‘/proc/36/task/107/fdinfo’: Permission denied
find: ‘/proc/36/task/108/fdinfo’: Permission denied
find: ‘/proc/36/task/109/fdinfo’: Permission denied
find: ‘/proc/36/task/110/fdinfo’: Permission denied
find: ‘/proc/36/task/112/fdinfo’: Permission denied
find: ‘/proc/36/task/113/fdinfo’: Permission denied
find: ‘/proc/36/task/114/fdinfo’: Permission denied
find: ‘/proc/36/task/115/fdinfo’: Permission denied
find: ‘/proc/36/task/116/fdinfo’: Permission denied
find: ‘/proc/36/task/117/fdinfo’: Permission denied
find: ‘/proc/36/task/118/fdinfo’: Permission denied
find: ‘/proc/36/task/119/fdinfo’: Permission denied
find: ‘/proc/36/task/120/fdinfo’: Permission denied
find: ‘/proc/36/task/121/fdinfo’: Permission denied
find: ‘/proc/36/task/122/fdinfo’: Permission denied
find: ‘/proc/36/task/123/fdinfo’: Permission denied
find: ‘/proc/36/task/124/fdinfo’: Permission denied
find: ‘/proc/36/task/125/fdinfo’: Permission denied
find: ‘/proc/36/task/126/fdinfo’: Permission denied
find: ‘/proc/36/task/127/fdinfo’: Permission denied
find: ‘/proc/36/task/128/fdinfo’: Permission denied
find: ‘/proc/36/task/135/fdinfo’: Permission denied
find: ‘/proc/36/task/136/fdinfo’: Permission denied
find: ‘/proc/36/task/149/fdinfo’: Permission denied
find: ‘/proc/36/task/585/fdinfo’: Permission denied
find: ‘/proc/36/task/906/fdinfo’: Permission denied
find: ‘/proc/36/task/1859/fdinfo’: Permission denied
find: ‘/proc/36/task/4308/fdinfo’: Permission denied
find: ‘/proc/36/task/4343/fdinfo’: Permission denied
find: ‘/proc/36/task/4380/fdinfo’: Permission denied
find: ‘/proc/36/task/4427/fdinfo’: Permission denied
find: ‘/proc/36/task/4459/fdinfo’: Permission denied
find: ‘/proc/36/task/4504/fdinfo’: Permission denied
find: ‘/proc/36/task/4542/fdinfo’: Permission denied
find: ‘/proc/36/task/5865/fdinfo’: Permission denied
find: ‘/proc/36/task/23465/fdinfo’: Permission denied
find: ‘/proc/36/task/53611/fdinfo’: Permission denied
find: ‘/proc/36/task/6649/fdinfo’: Permission denied
find: ‘/proc/36/task/6650/fdinfo’: Permission denied
find: ‘/proc/36/task/6651/fdinfo’: Permission denied
find: ‘/proc/36/task/6652/fdinfo’: Permission denied
find: ‘/proc/36/task/6676/fdinfo’: Permission denied
find: ‘/proc/36/map_files’: Permission denied
find: ‘/proc/36/fdinfo’: Permission denied
/etc/fess/fess_config.properties
```
最後の1行が見つかったところです。
見つかった場所のfess_config.propertiesを編集
```
nano /etc/fess/fess_config.properties
```

nanoライブラリをインストールしていないならばインストールする。nanoはテキストファイル編集で使います。
```
apt-get update && apt-get install -y nano
```



crawler.metadata.name.mapping=\ 　これを、↓
crawler.metadata.name.mapping=　

title=title:string\n
Title=title:string\n
↓
これを消す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/632b0d92-4ead-87e0-87fb-1ebf8e828fea.png)

Ctrl+Oで保存
ファイル名の編集画面になる。Enterで決定。
Ctrl+Zで元の画面に戻る。

クロールしなおせばファイル名が検索結果に出てます。


## java.lang.OutOfMemoryError: Java heap space
ヒープメモリの最大値を増やしてあげれば直ります。
メモリ不足で起きています。
dockerに入る。
```
docker exec -it fess01 /bin/bash
```
↑で書いた要領でfess_config.propertiesを探す。

```
nano /etc/fess/fess_config.properties
```

jvm.crawler.options で -Xmx512m 
↓
jvm.crawler.options で -Xmx3g 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/39138e12-0244-ef73-fb25-e3cb80e30c33.png)
3GBに設定　あなたの使用しているPCの物理メモリのサイズによって変えてください。

Ctrl+Oで保存
ファイル名の編集画面になる。Enterで決定。
Ctrl+Zで元の画面に戻る。

クロールしなおして完了

## 1gb以上のファイルをクロールさせる方法
なぜか、10MG以上のファイルはクロールされない設定になっています。
写真がついているofficeファイルはすぐに10MB超えるので絶対に回避したいエラーですね。


dockerに入る。
```
docker exec -it fess01 /bin/bash
```
↑で書いた要領でcontentlength.xmlを探す。

/usr/share/fess/app/WEB-INF/classes/crawler/
ここにあったのでcdで入る。
```
cd /usr/share/fess/app/WEB-INF/classes/crawler/
```

```
nano nano contentlength.xml
```

```
  GNU nano 4.8                                       contentlength.xml                                                  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
        "http://dbflute.org/meta/lastadi10.dtd">
<components namespace="fessCrawler">
        <include path="crawler/container.xml" />

        <component name="contentLengthHelper"
                class="org.codelibs.fess.crawler.helper.ContentLengthHelper" instance="singleton">
                <property name="defaultMaxLength">10485760</property><!-- 10M -->
                <postConstruct name="addMaxLength">
                        <arg>"text/html"</arg>
                        <arg>2621440</arg><!-- 2.5M -->
                </postConstruct>
        </component>
</components>
```
8行目と11行目を1073741824にしときます。※1GBまでをクロールさせる設定。

Ctrl+Oで保存
ファイル名の編集画面になる。Enterで決定。
Ctrl+Zで元の画面に戻る。

クロールしなおして完了
## @がついているファイルやディレクトリがクロール失敗する。
Fessバージョン14.15.0以上にアップデートすれば治ると思います。自分は14.11.x→14.15.0にアップデートしてクロールしなおしたら直りました。

必要なものはバックアップとってください。自分はアプデ後はまたクロールし直しするつもりでしたので、取りませんでした。

全体の流れとして14.11.x(現在のバージョン)を破棄して、14.15.0(アプデしたいバージョン)を再インストールするという流れ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/5b1c7ed5-c04f-e78f-e18e-56e55793cf82.png)

画像のごみ箱マークをクリック　するとdockerの中が空っぽになります。

------------------
Fessとopensearchのバージョンを確認。
今回は14.15.0にバージョンアップさせましょう。
参考　https://fess.codelibs.org/ja/downloads.html
Fess 14.15.0は、 (Java 17, OpenSearch 2.15.0)で動くそうです。

C:\docker-fess-masterを確認
Fessファイルとopensearchファイルの中に該当バージョンがあるか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/364c0563-2f79-310e-e877-badc8c061634.png)

Fess
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/6862f918-0ba7-c78e-d789-2cfd32d8f239.png)
opensearch
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/b0ea68e0-9174-e5b2-e1ca-0eec8dcd7b8d.png)

２つともありますね。
jdk17はインストールしてなかったらしてください。

----------------------------

C:\docker-fess-masterを確認
Cドライブにおいて無い人はdocker-fess-masterがあるディレクトリまで行って下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/a00a3a9b-c0aa-d35d-bff9-f3dba0e1da23.png)
この２つを編集していく。
まずcompose.yamlから。

```
services:
  fess01:
    image: ghcr.io/codelibs/fess:14.15.0
    # build: ./playwright # use Playwright
    container_name: fess01
    environment:
      - "SEARCH_ENGINE_HTTP_URL=http://es01:9200"
      - "FESS_DICTIONARY_PATH=${FESS_DICTIONARY_PATH:-/usr/share/opensearch/config/dictionary/}"
      # - "FESS_PLUGINS=fess-webapp-semantic-search:14.15.0 fess-ds-wikipedia:14.15.0"
      - "JAVA_OPTS=-Xms5g -Xmx7g"  # Javaヒープメモリの設定を追加
    ports:
      - "8080:8080"
    networks:
      - esnet
    depends_on:
      - es01
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    restart: unless-stopped

networks:
  esnet:
    driver: bridge
```
Fessのバージョンを指定してあげるかんじ。
次はcompose-opensearch2.yaml。
```
services:
  es01:
    image: ghcr.io/codelibs/fess-opensearch:2.15.0
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es01
      - cluster.initial_cluster_manager_nodes=es01
      - cluster.name=fess-es
      - bootstrap.memory_lock=true
      - node.roles=cluster_manager,data,ingest,ml
      - plugins.security.disabled=true
      - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
      - "FESS_DICTIONARY_PATH=/usr/share/opensearch/config/dictionary"
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=065@JMcZ#aBI5T

    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65535
        hard: 65535
    volumes:
      - esdata01:/usr/share/opensearch/data
      - esdictionary01:/usr/share/opensearch/config/dictionary
    ports:
      - 9200:9200
    networks:
      - esnet
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    restart: unless-stopped

volumes:
  esdata01:
    driver: local
  esdictionary01:
    driver: local
```
opensearchのバージョンを指定してあげる感じ。

cmdでコマンドうちます。
cd \docker-fess-master
docker compose -f compose.yaml -f compose-opensearch2.yaml up -d

ダウンロード始まる。
終了後 docker内にFessができたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/606eaa78-6952-8777-b3d5-c23425a21c48.png)
赤線にバージョンも書いてあります。

Fessにアクセスして@ファイルをクロールしなおしてください。

## クロールしたインデックス情報が喪失する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/5a4bde0e-e330-4c08-0ffb-b94d4e1cb2d2.png)

ダッシュボードの一番右の2.48GBがインデックスの総量。（だと思っている。）
これが減る時がある。　私の場合は1GB以上インデックス付けを行ったら600MBぐらいに落とされる。

色々調べてわからなかったけど、対策はできたので共有します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/6a4b4526-0211-2037-5b17-a53b4601731d.png)
スケジューラを開いてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/ae79f3b4-db05-160e-5cf3-98e1789049eb.png)
Default Crawler以外を停止してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/8ed5a688-053d-8fe8-a631-2c4ea344360f.png)
状態を有効→チェック外す　でOK

スケジュール　0 0 * * *　とは、毎日午前0時（深夜0時）に実行するという意味。
分   時   日   月   曜日
0    0    *    *    *
分 (0-59) : 0 → 0分（つまり、ちょうど0分のとき）
時 (0-23) : 0 → 午前0時（つまり、深夜0時）
日 (1-31) : * → 毎日
月 (1-12) : * → 毎月
曜日 (0-6, 日曜は0か7) : * → 毎曜日

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/025861e0-b55c-fb1a-93cf-10ef73636bba.png)
全般
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/aa14af4b-43a8-a54b-6fc4-ce1021acb9e3.png)
以前のドキュメントを削除を-1にする。