はじめに
NAS内のファイル数が数十万規模になると、ファイル名検索では目的のデータを見つけにくくなり、ディレクトリー構造の複雑化で検索効率も低下します。
このような環境では全文検索が有効です。
本シリーズでは、NAS内のファイルを高速かつ容易に検索するため、オープンソースの 全文検索サーバー Fess を用いて検索サーバーを構築する手順を紹介します。
検索サーバーのホストとしてRaspberry Pi 5を採用し、低消費電力で常時稼働可能な検索ノードの設置を目標としました。
本記事は全3回のうち 第2回 Fess インストール です。
シリーズ一覧
- Raspberry Pi × Fess で全文検索環境構築 (1) Pi 5 セットアップ
- Raspberry Pi × Fess で全文検索環境構築 (2) Fess インストール
- Raspberry Pi × Fess で全文検索環境構築 (3) Fess 構成
ソフトウェア構成
検索サーバーは、Webインターフェース、全文検索処理、索引管理、NASとの連携、LLM 連携の各機能を分離した構成で動作します。

| 名前 | バージョン | 役割 | 説明 |
|---|---|---|---|
| Nginx | 1.26.3 | Webサーバー | クライアントPCのWebブラウザーからのアクセスを受け付けるフロントエンドでFessへのリバース・プロキシとして動作 |
| Fess | 15.8.0 | 全文検索サーバー | NAS内ファイルのクロール、OpenSearchへの索引作成や検索要求、LLMサーバーへの問い合わせ実行 |
| OpenSearch | 3.8.0 | 検索エンジン | 索引の保持 |
| Ollama | 0.32.1 | LLM実行環境 | 検索結果の要約や自然言語応答の生成 |
Ollamaのインストール、構成
本記事で手順説明を省略します。以降の手順は、Ollamaが使用可能であることを前提として記述します。
OpenSearchのインストール
仮想メモリーの最大マップ数
OpenSearchで高速検索のためにメモリー・マップを大量に使用可能にするための設定です。
$ echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
OpenSearchのダウンロードとインストール
Raspberry Piの場合、ARM版deb形式パッケージをダウンロードします。
wget https://artifacts.opensearch.org/releases/bundle/opensearch/3.8.0/opensearch-3.8.0-linux-arm64.deb
デモ設定のインストールを無効化してインストールします。
$ sudo DISABLE_INSTALL_DEMO_CONFIG=true dpkg -i opensearch-3.8.0-linux-arm64.deb
OpenSearchプラグインのインストール
Fess前提となるOpenSearchプラグインをインストールします。
$ sudo /usr/share/opensearch/bin/opensearch-plugin install org.codelibs.opensearch:opensearch-analysis-fess:3.8.0
$ sudo /usr/share/opensearch/bin/opensearch-plugin install org.codelibs.opensearch:opensearch-analysis-extension:3.8.0
$ sudo /usr/share/opensearch/bin/opensearch-plugin install org.codelibs.opensearch:opensearch-minhash:3.8.0
$ sudo /usr/share/opensearch/bin/opensearch-plugin install org.codelibs.opensearch:opensearch-configsync:3.8.0
OpenSearchの設定
Fess辞書ファイルを同期、管理するためのディレクトリーの絶対パスを指定します。
$ sudo nano /etc/opensearch/opensearch.yml
/etc/opensearch/opensearch.yml に以下を追記します。
configsync.config_path: /etc/opensearch/config/
plugins.security.disabled: true
OpenSearchヒープの設定
最大で100MBのファイルの索引作成を可能にするため、ヒープや文字列フィールドの大きさを拡張します。
$ sudo nano /etc/opensearch/jvm.options
ヒープ・サイズを1gから4gに変更します。
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms4g
-Xms4g
また、以下を追記します。
-Dopensearch.xcontent.string.length.max=104857600
Fessのインストール
FessはDocker版が提供されますが、サムネイル機能を使用するためインストール版を使用します。
Javaの確認
Fessの前提となるJavaがインストールされているか確認します。
$ which java
インストールされていない場合はJava 21をインストールします。
$ sudo apt install -y openjdk-21-jdk
Javaが使用可能であることとバージョンを確認します。
$ which java
/usr/bin/java
$ java --version
openjdk 21.0.12.1 2026-08-18
OpenJDK Runtime Environment (build 21.0.12.1+1-1-deb13u1-Debian)
OpenJDK 64-Bit Server VM (build 21.0.12.1+1-1-deb13u1-Debian, mixed mode, sharing)
Fessのダウンロードとインストール
deb形式パッケージをダウンロードしてインストールします。
$ wget https://github.com/codelibs/fess/releases/download/fess-15.8.0/fess-15.8.0.deb
$ sudo dpkg -i fess-15.8.0.deb
Fessユーザーの設定
Fessユーザーの環境変数を設定します。
$ sudo nano /etc/default/fess
FESS_DICTIONARY_PATHのバスは、/etc/opensearch/opensearch.yml のconfigsync.config_pathと同じ値にします。
大量のファイルを処理するため、ヒープを2gに拡張します。
FESS_DICTIONARY_PATH=/etc/opensearch/config/
FESS_HEAP_SIZE=2g
サービスと登録と有効化
OpenSearchとFessをサービスとして登録します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable opensearch.service
$ sudo systemctl enable fess.service
Fess初期設定
JVM Options for the crawler processセクションを変更します。
$ sudo nano /etc/fess/fess_config.properties
-Xmx を4096mに -XX:MaxMetaspaceSize を512m に変更します。
# JVM options for the crawler process.
jvm.crawler.options=\
-Djava.awt.headless=true\n\
-Dfile.encoding=UTF-8\n\
-Djna.nosys=true\n\
-Djdk.io.permissionsUseCanonicalPath=true\n\
-Dhttp.maxConnections=20\n\
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager\n\
-server\n\
-Xms128m\n\
-Xmx4096m\n\
-XX:MaxMetaspaceSize=512m\n\
また、AI検索機能を有効にするため、rag.chat.enabledを有効化します。
# Whether RAG chat feature is enabled.
rag.chat.enabled=true
あわせてLLMサーバーのアドレス、モデル名を追加します。
# Ollama URL
rag.llm.ollama.api.url=http://<LLM_SERVER>:<PORT>
# Model
rag.llm.ollama.model=<LLM_MODEL_NAME>
サムネイル作成前提パッケージのインストール
Fessには検索結果画面でファイルのサムネイルを表示する機能があります。この機能を使用するためには外部ツールのインストールが必要です。
Raspberry Pi OSではOfficeファイルのサムネイル作成に必要な unoconv のかわりに libreoffice パッケージを使用します。
$ sudo apt install -y imagemagick librsvg2-bin poppler-utils libreoffice ghostscript fonts-noto-cjk
contentlength.xmlの変更
Fessで索引作成可能なファイルのデフォルト・サイズは、text/htmlが2.5MB、その他のファイルが10MBです。今回は、text/htmlで10MB、その他のサイズで100MBまでの索引作成を可能にするため、contentlenght.xml を変更します。
$ sudo nano /usr/share/fess/app/WEB-INF/classes/crawler/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">104857600</property><!-- 100M -->
<postConstruct name="addMaxLength">
<arg>"text/html"</arg>
<arg>10485760</arg><!-- 10M -->
</postConstruct>
</component>
</components>
起動
サービス起動
OpenSearch、Fessの順に起動します。
$ sudo systemctl start opensearch
$ sudo systemctl start fess
起動確認
Webブラウザーから http://<FESS>:<PORT> にアクセスします。デフォルトのポート番号は 8080 です。

Nginxのインストール
Fess画面へのアクセスをSSL(ポート番号 443)で可能にするため、Nginxをインストールして構成します。
Nginxのインストール
Nginxをインストールします。
$ sudo apt install -y nginx
SSL設定
mkcert のインストールと自己署名証明書の発行を行います。
$ sudo apt install -y libnss3-tools
$ curl -s https://api.github.com/repos/FiloSottile/mkcert/releases/latest | grep browser_download_url | grep linux-arm64 | cut -d '"' -f 4 | xargs wget -O mkcert
$ chmod +x mkcert
$ sudo mv mkcert /usr/local/bin/
$ sudo mkdir -p /etc/nginx/ssl
$ cd /etc/nginx/ssl/
$ sudo mkcert <HOSTNAME>
$ sudo mkcert -intsall
設定ファイルの作成
FessへのアクセスをNginx経由で行うため、Nginx設定ファイルを作成します。
sudo nano /etc/nginx/sites-available/fess
AI検索画面使用のためには、AI Chat セクション以下の設定が必要になります。
# HTTP -> HTTP Auto Redirect
server {
listen 80;
server_name <HOSTNAME>;
return 301 https://$host$request_uri;
}
# Fess (https://<HOSTNAME>)
server {
listen 443 ssl;
http2 on;
server_name <HOSTNAME>;
ssl_certificate /etc/nginx/ssl/<HOSTNAME>.pem;
ssl_certificate_key /etc/nginx/ssl/<HOSTNAME>-key.pem;
location / {
proxy_pass http://127.0.0.1:8080;
# Base
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Reverse Proxy Forwarding Headers
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;
# AI Chat (SSE/Streaming)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_read_timeout 3600s;
}
}
設定の有効化とNginxの再起動
Fessのための設定を有効化します。
$ sudo ln -s /etc/nginx/sites-available/<HOSTNAME> /etc/nginx/sites-enabled/
$ sudo rm -f /etc/nginx/sites-enabled/default
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl restart nginx
Nginx経由でのアクセス確認
Webブラウザーから https://<FESS> にアクセスします。

次のステップ
続いてFessの構成に進みます。