【Ubuntu】オープンソース全文検索システムFessのインストール

【Ubuntu】オープンソース全文検索システムFessのインストール サーバー

「無料で全文検索サーバーを作りたい」
「全文検索機能をシステムに組み込みたい」

このような場合には、Fessがオススメです。
この記事では、Fessのインストール方法を解説しています。

本記事の内容

  • Fessとは?
  • Fessのシステム要件
  • Fessのダウンロード
  • Fessのインストール
  • Fessの動作確認

それでは、上記に沿って解説していきます。

Fessとは?

Fess (フェス) とは、全文検索サーバーです。
オープンソースとして公開されており、無料で利用できます。

特徴は、公式で以下が記載されています。

Apache ライセンスで提供 (フリーソフトなので、無料で利用可能) 
Web、ファイルシステム、Windows共有フォルダ、データベースをクロール 
MS Office(Word/Excel/PowerPoint) や PDF など多くのファイル形式に対応 
OS 非依存 (Java ベースで構築) 
既存サイトへの組み込み用JavaScriptの提供 
ElasticsearchまたはOpenSearchを検索エンジンとして利用 
BASIC/DIGEST/NTLM/FORM認証のサイトも検索可能 
ログイン状態により検索結果の出し分けが可能 
ActiveDirectoryやSAMLなどを用いたシングルサイオン(SSO) 
地図情報と連携した位置情報検索 
ブラウザ上でクロール対象設定や検索画面編集など可能 
検索結果をラベル付けにより分類 
リクエストヘッダーに情報付加、重複ドメインの設定、検索結果のパス変換 
JSON形式で検索結果出力により外部システムとの連携が可能 
検索ログおよびクリックログの集計 
ファセット・ドリルダウン対応 
オートコンプリート・サジェスト機能 
ユーザー辞書および同義語辞書編集機能 
検索結果のキャッシュ表示機能とサムネイル表示機能 
検索結果のプロキシ機能 
スマートフォン対応 (Responsive Web Design) 
アクセストークンにより外部システム連携 
Learning To Rankにも対応可能 
OCRなどの外部テキスト抽出対応 
用途に応じて柔軟に対応可能な設計

正直、書き過ぎと思います。
でも、それぐらい様々なことができると言いたいのでしょう。

個人的には、外部との連携に最も魅力を感じます。
全文検索は、基本的な機能です。

プログラミングの初心者でも開発できます。
しかし、大量データを処理するとなると、一気に難易度が上がります。

初心者が作った全文検索では、まともに動きません。
かと言って、そこまでコストをかけて開発するようなモノでもありません。

そんな場合に、Fessを既存システムに柔軟に組み込むことができそうです。
選択肢の一つとして、Fessを覚えておいても損はありません。

なお、Fessがサポートしているファイル形式は以下です。

  • テキスト (txt)
  • XML (xml, xhtml, mm等)
  • HTML (html, htm)
  • MS Office (doc, xls, ppt, docx, xlsx, pptx等)
  • PDF (pdf等)
  • ソースコード (js, c, h, java等)
  • 圧縮ファイル (gz, tar, zip等)
  • リッチテキスト (rtf)
  • ePub
  • 音声/画像/動画 (メタデータの抽出)
  • mbox
  • aiファイル (PDF互換)

以上、Fessについて説明しました。
次は、Fessのシステム要件を説明します。

Fessのシステム要件

現時点で最新となるのは、Fess 14.0.1です。
Fess 14.0.1は、2022年3月24日にリリースされています。

Fessのシステム要件でポイントになるのは、以下。

  • OS
  • Java
  • Elasticsearch

それぞれを下記で説明します。

OS

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

基本的には、OSは問わないと言えます。
今回の検証では、以下のOSを利用しています。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=20.04 
DISTRIB_CODENAME=focal 
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"

Java

Fess 14では、Java 17が必須とされています。
UbuntuへのJavaのインストールは、次の記事で解説しています。

上記記事を参考にして、Ubuntu 20.04にJava 17をインストールしています。

$ java --version  
openjdk 17.0.2 2022-01-18  
OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04)  
OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing)

Elasticsearch

Fess 14では、Elasticsearch 8での動作が保証されています。
Elasticsearch 8のインストールは、次の記事で説明しています。

上記記事を参考にして、動作確認までは済ませておきます。

まとめ

Elasticsearchのシステム要件にもJavaがあります。
今回は、Elasticsearchに関してはバンドルされているJavaを利用しておきます。

別途インストールしたJava 17を指定することも可能です。
しかし、Elasticsearchの公式はバンドル版Javaの利用を推奨しています。

ちなみに、Elasticsearch 8にバンドルされているJavaのバージョンは17です。

以上、Fessのシステム要件を説明しました。
次は、Fessのダウンロードを説明します。

Fessのダウンロード

GitHub上のFessダウンロードページ
https://github.com/codelibs/fess/releases/

上記ページにアクセスします。

今回は、Ubuntuが対象OSとなります。
そのため、「fess-14.0.1.deb」をダウンロードします。

wget https://github.com/codelibs/fess/releases/download/fess-14.0.1/fess-14.0.1.deb

ダウンロードが完了したら、確認しておきます。

$ ls 
fess-14.0.1.deb

問題なくダウンロードできています。

以上、Fessのダウンロードを説明しました。
次は、Fessのインストールを説明します。

Fessのインストール

Fessのインストールは、次の段階に分けて行います。

  • Elasticsearchの追加インストール
  • Fessのインストール

それぞれを下記で説明します。

Elasticsearchの追加インストール

FessでElasticsearchを利用できるようにします。
そのため、Elasticsearchへ追加でインストールしていくということです。

次の2種類のモノをインストールする必要があります。

  • Elasticsearchプラグイン
  • elasticsearch-configsync

これらのインストールを行う前に、Elasticsearchは停止しておきます。

sudo systemctl stop elasticsearch.service

Elasticsearchプラグイン

まずは、Elasticsearchのバージョンを確認します。

$ sudo /usr/share/elasticsearch/bin/elasticsearch --version 
Version: 8.1.1, Build: default/deb/d0925dd6f22e07b935750420a3155db6e5c58381/2022-03-17T22:01:32.658689558Z, JVM: 17.0.2

Elasticsearch 8.1.1と確認できます。
そのため、ここでは次のバージョンのプラグインをインストールします。

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:8.1.0
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:8.1.0 
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:8.1.0

インストールするプラグインのバージョンに関しては、次のページで確認しています。
https://repo1.maven.org/maven2/org/codelibs/elasticsearch-analysis-fess/

プラグインのインストールが完了したら、確認しておきます。

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin list 
analysis-extension 
analysis-fess 
minhash

3つインストールできていますね。

elasticsearch-configsync

ElasticsearchとFessの設定を同期させるために必要です。
次の3つのコマンドを実行します。

$ curl -o /tmp/configsync.zip https://repo1.maven.org/maven2/org/codelibs/elasticsearch-configsync/8.1.0/elasticsearch-configsync-8.1.0.zip
$ sudo mkdir -p /usr/share/elasticsearch/modules/configsync
$ sudo unzip -d /usr/share/elasticsearch/modules/configsync /tmp/configsync.zip

圧縮ファイルをダウンロードして、特定のディレクトリに展開しているだけです。
何も難しいことはしていません。

ただ、Ubuntuだとunzipコマンドが動かない可能性があります。
その場合は、次のコマンドでサクッとunzipをインストールしましょう。

sudo apt-get install unzip

なお、設置したファイルは以下となります。

$ tree /usr/share/elasticsearch/modules/configsync 
/usr/share/elasticsearch/modules/configsync 
├── commons-codec-1.15.jar 
├── elasticsearch-configsync-8.1.0.jar 
├── plugin-descriptor.properties 
└── plugin-security.policy 
0 directories, 4 files

あと、Elasticsearchの設定ファイルも変更する必要があります。
Elasticsearchに連携することを教えてあげる必要もあるということです。

/etc/elasticsearch/elasticsearch.yml

configsync.config_path: /var/lib/elasticsearch/config 

最終行に上記を追加します。
加えて、次の設定をtrueからfalseに変更します。

# Enable security features 
#xpack.security.enabled: true 
xpack.security.enabled: false 

Elasticsearch 8からは、デフォルトでセキュリティが厳しくなっています。
その設定をfalseにするのは、すこし忍びないですが・・・

Fessとの連携を行う上では、仕方がありません。
その分だけ、別の箇所でセキュリティを厳しくすればよいでしょう。

Fessのインストール

ダウンロードしたdebファイルを利用します。

$ sudo dpkg -i fess-14.0.1.deb

上記を実行すると、すぐに処理は終わります。
最後に、ElasticsearchとFessをサービスとして登録しておきます。

$ sudo systemctl daemon-reload 
$ sudo systemctl enable elasticsearch.service 
$ sudo systemctl enable fess.service

Elasticsearchについては、2回目かもしれませんが問題ありません。

以上、Fessのインストールを説明しました。
次は、Fessの動作確認を説明します。

Fessの動作確認

Fessの動作確認は、次の流れで行います。

  • Fessの起動
  • Fess(Webアプリ)へのアクセス

Fessの起動

Fessを起動する前に、Elasticsearchを起動する必要があります。

$ sudo systemctl start elasticsearch.service

Elasticsearchを起動したら、状況を確認します。

$ sudo systemctl status elasticsearch.service 
● elasticsearch.service - Elasticsearch 
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) 
     Active: active (running) since Fri 2022-03-25 09:49:19 JST; 4min 4s ago 
       Docs: https://www.elastic.co 
   Main PID: 21853 (java) 
      Tasks: 66 (limit: 9508) 
     Memory: 4.3G 
     CGroup: /system.slice/elasticsearch.service 
             ├─21853 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cach> 
             └─22148 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

そして、次にFessを起動します。

$ sudo systemctl start fess.service

Fessも同じように起動状況を確認。

$ sudo systemctl status fess.service 
● fess.service - Fess 
     Loaded: loaded (/lib/systemd/system/fess.service; enabled; vendor preset: enabled) 
     Active: active (running) since Fri 2022-03-25 09:55:10 JST; 7s ago 
       Docs: http://fess.codelibs.org/ 
   Main PID: 22592 (java) 
      Tasks: 24 (limit: 9508) 
     Memory: 630.3M 
     CGroup: /system.slice/fess.service 
             └─22592 /bin/java -Xms512m -Xmx512m -XX:MaxMetaspaceSize=256m -XX:CompressedClassSpaceSize=32m -Djava.awt.headless=t>

Fess(Webアプリ)へのアクセス

アクセスするためには、FessをインストールしたサーバーのIPアドレスを調べます。
IPアドレスの調べ方は、次の記事で解説しています。

今回の検証では、「192.168.33.100」というIPアドレスでした。
この場合は、次のURLにアクセスします。

http://192.168.33.100:8080/

もちろん、同一マシン上でブラウザも動くなら以下でもOK。
http://localhosyt:8080/

アクセスした結果、次の画面が表示されればFessの動作確認は成功です。

しかし、次のように表示される場合があるかもしれません。

このエラーが出る場合は、サーバーのファイアウォールを確認しましょう。
確認には、次のコマンドを用います。
Fessは、デフォルトではポート8080で起動します。

$ sudo ufw status | grep '8080'

何も表示されなければ、8080は未開放です。
次のコマンドで開放します。

$ sudo ufw allow 8080

その結果、次のように表示されれば開放されています。

$ sudo ufw status | grep '8080' 
8080                       ALLOW       Anywhere 
8080 (v6)                  ALLOW       Anywhere (v6)

この状態で再度、ブラウザでアクセスします。

以上、Fessの動作確認を説明しました。

タイトルとURLをコピーしました