FessでブラウザからS3を手軽に検索してみた
文書やオブジェクト等に対して検索する時に特定のキーワードを含んでいるものを除外したいことがあります。よくある方法としては cat
と grep
を併用しますが、手軽くブラウザ上の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の検索を行う
手順は以下の通り。
- IAMユーザを作成する
- プラグインを有効化する
- クローラを追加する
- ジョブを作成する
- スケジュールを作成する
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以外にも対応しているデータストア等があるので、頻繁につかっているものがあれば試してみましょう。