初めての記事になります。
不足・誤り等ありましたらご指摘下さい。
全文検索OSSであるFessを導入しましたので、備忘録です。
とあるWEBシステム内の検索をするために導入しました。
使用するにあたり設定に苦労しましたので、共有も兼ねています。
仮想ホスト環境(参考)
- vagrant + VirtualBox
- Centos7
- HDD 50GB
- Memory 8GB
- docker (19.03.5)
- docker-compose (1.25.2)
環境構築
docker上にFessを構築します。
(検証した際は codelibs/fess:13.5.0 で構築しました)
1.イメージ取得
下記のように、GitHubから公式リポジトリをcloneして下さい。
git clone https://github.com/codelibs/docker-fess.git
2.起動
docker-compose で起動して下さい。
Fess + elasticsearch(2台) + kibana が起動されます。
起動タイミングでは elasticsearchだけが落ちる場合がありますが、restartで解決します。
docker-compose up -d
docker-compose restart
起動後は以下のような構成となります。
[root@localhost compose]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f054fc200d28 codelibs/fess:13.5.0 "/bin/sh -c /usr/sha…" 2 months ago Up About a minute 9200/tcp, 9300/tcp, 0.0.0.0:8081->8080/tcp fess01
60b78d5d0f58 docker.elastic.co/kibana/kibana:7.5.1 "/usr/local/bin/dumb…" 2 months ago Up About a minute 0.0.0.0:5602->5601/tcp kibana
577c9e3abe87 codelibs/fess-elasticsearch:7.5.1 "/usr/local/bin/dock…" 2 months ago Up About a minute 9300/tcp, 0.0.0.0:9202->9200/tcp es02
17089688b1f1 codelibs/fess-elasticsearch:7.5.1 "/usr/local/bin/dock…" 2 months ago Up About a minute 9300/tcp, 0.0.0.0:9201->9200/tcp es01
3.確認 / ログイン
http://localhost:8080 へアクセスして下さい。
検索画面が表示されればOKです。
また、右上のログインから、管理者ログインして下さい。
初期PASSは admin / admin です。
4.クロール設定例
クロール → WEB を開きます。
項目 | 設定値 |
---|---|
名前 | web_crawler_test |
URL | http://xxx.xxx.xxx.xxx/test/ |
クロール対象とするURL | http://xxx.xxx.xxx.xxx/test/.* |
クロール対象から除外するURL | http://xxx.xxx.xxx.xxx/test_out/.* .*history.* |
最大アクセス数 | 200000 |
スレッド数 | 5 |
間隔 | 500 |
ブースト値 | 1.0 |
状態 | 有効 |
クロール対象から除外したい場合は、該当パス以下を指定します。
特定の文字が入ったURLだけ除外したい場合は、".* history.*" のように指定しましょう。
対象が非常に多いため、最大アクセス数を20万件にしています。
5.スケジューラ設定
システム → スケジューラ を開きます。
初回およびテスト時は、「いますぐ開始」です。
定期的な実施に関しては、「スケジュール」項目だけ設定注意です。
" 分 / 時 / 日 / 月 / 曜日 " の順で記載します。
例)土曜日の0時に実施したい → 0 0 * * 6
6.結果確認
システム情報 → ジョブログ を開きます。
スケジューラから実行された結果ログが表示されます。
状態欄にOKと表示されていれば完了です。
6-1.(参考)エラー調査
- 対象パスへアクセスできない → ホスト側で名前解決できていませんでした…
- スケジューラが失敗 → elasticsearch が落ちていました…(ちゃんとcurlで確認しましょう)
クラスタの状態は例えば以下のように確認します。
[root@localhost compose]# curl http://localhost:9201/_cluster/health?pretty
{
"cluster_name" : "fess-es",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 91,
"active_shards" : 182,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
6-2.(参考)取得データ0件調査
- クロール対象URLの記載方法が間違っているかも → URLの最後に/(スラッシュ)が抜けていました…
6-3.(参考)文字コード問題
- クロール対象のexcelが文字化けする
システム → ページのデザイン → ページファイルの表示 → /searchResults.jsp
このファイル内に文字コード変換スクリプトを埋め込みました。
(参考サイト様を失念しましたので、分かり次第追記いたします)
同様に、ファイル名だけ表示したい、リンク短縮したいなどの見栄えも
このファイルを修正すれば変更可能です。
Fessコンテナ内の下記パスに画像ファイルを配置し、
searchResult.jspを変更すればFESSロゴの代わりに、
独自のロゴを設定できたりもします。
root@f054fc200d28:/usr/share/fess/app/images# pwd
/usr/share/fess/app/images
root@f054fc200d28:/usr/share/fess/app/images# ls -l
total 56
drwxr-xr-x. 2 fess fess 26 Dec 21 03:38 admin
-rwxr-xr-x. 1 fess fess 506 Dec 21 02:53 blank.png
-rwxr-xr-x. 1 fess fess 12799 Dec 21 02:53 glyphicons-halflings.png
-rwxr-xr-x. 1 fess fess 8777 Dec 21 02:53 glyphicons-halflings-white.png
-rwxr-xr-x. 1 fess fess 5167 Dec 21 02:53 loading.gif
-rwxr-xr-x. 1 fess fess 907 Dec 21 02:53 logo-head.png
-rwxr-xr-x. 1 fess fess 2360 Dec 21 02:53 logo.png
-rwxr-xr-x. 1 fess fess 1529 Dec 21 02:53 logo-top.png
-rwxr-xr-x. 1 fess fess 1469 Dec 21 02:53 noimage.png
6-4.(参考)default crawler について
週1回のペースでWEBクロールを行っていましたが、想像以上にディスクリソースを消費するうえにクロールが中々終わらない、という事象が起きたため取り込み直したのち default crawler を無効化しました。
下記画像のように、ダッシュボードから DELETE INDEX を選択することで
データが消えますので、再度取り込み直すこともできます。
過去資料の検索目的だけでしたので、断面として残しています。
default crawler を定期的に実行する場合は負荷にご注意下さい。