「無料で全文検索サーバーを作りたい」
「全文検索機能をシステムに組み込みたい」
このような場合には、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の動作確認を説明しました。