FessでブラウザからS3を手軽に検索してみた

S3等を検索する際にフィルタリングを手軽に行える方法はないものかと思い調べていたところ、Fessにたどり着いたので試してみました。
2022.05.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

文書やオブジェクト等に対して検索する時に特定のキーワードを含んでいるものを除外したいことがあります。よくある方法としては catgrep を併用しますが、手軽くブラウザ上のUIでGoogle検索を掛けるノリで済ませたいなというのも正直なところです。

何かあればいいけど何もないだろうなと思っていましたが、先日色々キーワードをかえて検索していたところFessを見つけました。

試しにS3を試したところ、望んだ通りの結果を得ることができました。

インストール

Fessの動作環境はWindows/Unixとなっています。依存ライブラリの問題があるため、Dockerベースにて行います。

mkdir fess
cd fess/
curl https://raw.githubusercontent.com/codelibs/docker-fess/master/compose/compose.yaml -o compose.yaml
curl https://raw.githubusercontent.com/codelibs/docker-fess/master/compose/compose-elasticsearch8.yaml -o compose-elasticsearch8.yaml
docker compose -f compose.yaml -f compose-elasticsearch8.yaml up -d

http://localhost:8080/admin/にアクセスします。初期のユーザ名とパスワードは両方adminです。

S3の検索を行う

手順は以下の通り。

  1. IAMユーザを作成する
  2. プラグインを有効化する
  3. クローラを追加する
  4. ジョブを作成する
  5. スケジュールを作成する

IAMユーザを作成する

AmazonS3ReadOnlyAccess を設定したIAMユーザを作成して、アクセスキーIDとシークレットアクセスキーを取得します。

プラグインを有効化する

S3クローラは初期から用意されており、システムのプラグインからインストールにてリモートの「fess-ds-s3-xx.x.x」を選択します。

クローラを追加する

クローラのデータストアから新規作成にて登録します。

名前は適当にいれます。ハンドラには AmazonS3DataStore を指定します。

パラメータには以下の内容を設定します。先に作成したIAMユーザの各キーを指定します。

region=ap-northeast-1
access_key_id=***
secret_key=***

スクリプトには以下の内容を設定します。

url=object.url
title=object.key
content=object.contents
mimetype=object.mimetype
filetype=object.filetype
filename=object.filename
content_length=object.size
last_modified=object.last_modified

作成すると一覧に戻ります。

ジョブを作成する

一覧から作成した設定を選択し、ページ下の「新しいジョブを作成」を選択します。今回は変更せずにそのまま「作成」を選択して一覧に戻ります。

スケジュールを指定する

一覧から作成したジョブを選択し、ページ下の「今すぐ開始」を選択します。状態が「実行中」から「有効」になれば完了です。

検索してみる

Fessの検索画面に移動し、適当に検索してみます。

除外検索も機能します。

あとがき

今回はS3を対象にしてみました。実装を見る限りではオブジェクト内までは検索しません。また、S3の場合はリンク先のアクセス権限まではないため、検索結果のリンクはいずれもアクセスを弾かれます。

制約はありますが、ファイルパス等にルールを予め持たせることでデータが存在するかどうかという点での検索には使えるはずです。S3以外にも対応しているデータストア等があるので、頻繁につかっているものがあれば試してみましょう。