はじめに
世にOSSのクローラや検索システムは沢山ありますが、プラグインなしでクローリング+スクレイピング+全文検索が一挙にできるツールは意外と少ない気がします。
Fessは、それらをまとめて簡単に実現できるOSSの全文検索サーバです。今回は、Wikipediaをクローリングし、検索できることを確認するところまでやってみます。
Fessの主な特徴は以下の通りです。
- Javaベース
- Apache License
- 日本語のドキュメントあり
- 導入が非常に簡単
- 機能多数
詳しくは公式を参照。
https://fess.codelibs.org/ja/index.html
インストール手順
OS : Windows10
Fessのバージョン : 12.1.3
https://github.com/codelibs/fess/releases
から圧縮ファイルを落として解凍するだけです。
Webクロール
実際にWebクロールをしてみます。
Fessの起動
初めにFessを起動します。
$ .\bin\fess
※事前にJavaをインストールし、環境変数JAVA_HOMEを設定しておく必要があります。
起動したら、Fessの管理画面 http://localhost:8080/admin/ にアクセスします。
ユーザ名/パスワードはadmin/adminです。
クローラ設定
次にクローラの設定をします。
クローラ>ウェブ>新規作成をクリックします。
設定画面が開きます。
そのままではページ全体が検索対象となってしまうため、本文以外は検索に引っかからないように設定パラメータに以下のようなフィールドを追加します。
field.xpath.article_title=//*[@id="firstHeading"]
field.xpath.article_content=//*[@id="mw-content-text"]/DIV/P
一行目では、article_title
フィールドに//*[@id="firstHeading"]
(記事タイトル)の内容
二行目では、article_content
フィールドに//*[@id="mw-content-text"]/DIV/P
(記事本文)の内容
をXPathで指定しています1。
※この設定によりフィールドにテキスト自体は格納されますが、そのフィールドを指定した検索ができません。検索可能にするには以下のようにファイルを編集し、Fessを再起動する必要があります。
query.additional.response.fields=article_title,article_content
query.additional.search.fields=article_title,article_content
クロール
実際にクロールをします。
システム>スケジューラ>Default Crawler>今すぐ開始をクリックするとクローリングが始まるので、しばし待ちます(デフォルト設定では毎日0時0分に自動でクローリングします)。
クロールの実行中はDefault Crawlerの状態が実行中
になるので確認できます。
検索
最後に検索をしてみます。
Fessの検索画面 http://localhost:8080/ にアクセスし、先ほど作成したフィールドで検索します2。
できました。
おわりに
FessはWebだけでなく、ファイルシステムなどもクロール可能な非常に完成度の高いクローラだと思います。
ただ完成度が高いがゆえに、細かい設定をしようと思うと難しい印象がありますね。そういう場合は、ManifoldCFやElasticsearch、Solr等を使って自分でシステムを作ったほうが良いのかもしれません。