ブログ

ryuzeeによるブログ記事。不定期更新

オープンソースの全文検索エンジンFessを試してみた

みなさんこんにちは。@ryuzeeです。

このWebサイト、昔はWordpressを使っていたのですが、本体やプラグインのメンテナンスを頻繁にやらなきゃいけなくて面倒なのと性能面などで辛くなって、その後Ruby製の静的サイトジェネレータであるMiddlemanに変更し、その後ビルドの遅さに耐えられなくなってGo言語で作られているHugoに置き換わっています。

静的コンテンツになればAmazon S3などで運用できるので非常に楽なのですが、一方でサイト内を検索したい場合は別の解決策の用意が必要になります。Googleの検索を埋め込んでももちろん良いのですが、調査の一環として、今回はオープンソースの全文検索エンジンFessを試してみました。

Fessの特徴

公式サイトで詳細に紹介されていますが、主な特徴として以下のようなものが挙げられます。

  • 5分で簡単に構築可能
  • Apache ライセンス
  • Java 1.8を利用しておりOSには依存しない
  • Web以外に共有フォルダなどもクロールできる
  • クローリングの設定など必要な設定はすべてGUI上でできる
  • Elasticsearchを検索エンジンとして利用している(内包しているので別途インストールの必要はない)

インストール

Java 1.8以上の環境であれば環境を選ばないということですが、使い慣れているUbuntu 14.04に構築します。なお、Ubuntu16系であればデフォルトでopenjdk-8が利用できるようになっているので多少手順は減ります。

必要なパッケージのインストール

ここでは、Fessを動かすのに必要な、Java 1.8の環境、Proxyとしてapache2、Fessを常時起動しておくためのSupervisorなどをインストールします。

sudo apt-get update
sudo apt-get install -y apt-file
sudo apt-file update
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install -y language-pack-ja
sudo apt-get install -y unzip
sudo apt-get install -y openjdk-8-jdk
sudo apt-get install -y apache2 supervisor
sudo a2enmod proxy proxy_http proxy_html xml2enc
sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

Fess本体の配置

Fess本体はどこに配置しても構いません。今回の場合は/opt/fessに配置します。

wget https://github.com/codelibs/fess/releases/download/fess-10.1.1/fess-10.1.1.zip
unzip fess-10.1.1.zip
sudo mv fess-10.1.1 /opt/
sudo ln -s /opt/fess-10.1.1 /opt/fess

ここで、/opt/fess/bin/fessを実行すれば起動しますが、一旦先に進めます。

Supervisorの設定

SupervisorでFessをデーモン化します。

/etc/supervisor/conf.d 以下にfess.confなどの名前で以下のような中身のファイルを作成します。なおuserの箇所はfessディレクトリの持ち主にあわせてください。Vagrantの場合は、vagrantで、AWSの場合だとubuntuになるはずです。

[supervisord]
nodaemon=false

[program:fess]
command=/opt/fess/bin/fess
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/fess.log
redirect_stderr=true

できあがったら、Supervisorを念の為再起動します。

sudo service supervisor restart

これでFessが自動で起動しているはずです。

Apacheの設定

この時点ではFessは8080ポートでListenしているので80ポートでアクセスできるように手前にApacheなどのHTTP Serverをかまします。/etc/apache2/sites-enabled にある 000-default.conf を以下のように修正します。

<VirtualHost *:80>
    #ServerName www.example.com
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/fess_error.log
    CustomLog ${APACHE_LOG_DIR}/fess_access.log combined
    <Location />
        ProxyPass http://localhost:8080/
    </Location>
</VirtualHost>

ここまでできたらApache2を再起動して、ブラウザでアクセスしてみます。なお、現時点ではなにもインデックスされていないので検索してもなんの結果もでません。

インデックス関連の設定

次に管理画面にログインしましょう。右上のリンクからログインします。初期値はユーザーIDとパスワードともにadminです。 ログインが終わったら、いろいろな設定をする前に、左メニューの「ユーザー」の箇所にアクセスしてパスワードを変更しておきます。

そしてクローラの設定をするために、左メニューのクローラからウェブを選択して、新規に設定をおこないます。

設定する項目は順に以下のようになります。

  • 名前:このクロールの設定の名前。自分で区別が付く名前を好きにつけます
  • URL:起点となるURL
  • クロール対象とするURL:起点からページを辿っていくときに対象にするURLを指定
  • クロール対象から除外するURL:タグ別のページなどクロールしなくてもよいページを指定
  • 検索対象とするURL:画面から検索したときに対象とするURLを正規表現で指定
  • 検索対象から除外するURL:検索結果に出さないURLを正規表現で指定
  • 設定パラメータ:クロールする際の設定値を渡せる。たとえば field.xpath.default.content=//*[contains(@class,‘article_body’)] のように指定すると、検索対象を特定の要素に限定できる
  • 深さ:何階層たどっていくかを指定
  • 最大アクセス数:1度のクローリングで何ページまでクロールするかを指定
  • スレッド数:クローラの同時並列数を指定
  • 間隔:1回のページ取得の間にどれくらい待ち時間を入れるか指定
  • ブースト値:クローリングで取得した結果の重み付け。値が大きければ検索結果として上位にでるようになる

ここまで設定が終わったら実行してみます。通常Webクローラは毎日0時に動くことになっていますが、システム→スケジューラの順にたどると、Default Crawlerの設定がありますので、ここで「今すぐ開始」をクリックして実行します。どのくらいの時間がかかるかはクロール対象のページ数などによって変わります。

画面デザインの修正

Fess自体はテンプレートにBootstrapが使われているので、レスポンシブルにも対応していますし、CSSなどを用意すれば簡単にデザインを変更できます。 たとえばヘッダーを変更したければ「システム」→「ページのデザイン」とたどり、「ページファイルの表示」の箇所から「ヘッダー」を選択して編集ボタンをクリックして編集します。

同じように他のパーツを編集したり、ロゴイメージをアップロードして差し替えるといったことが可能です。

ここまでやれば以下のような感じになります。

まとめ

5分で使えるという謳い文句どおりにすぐ使える全文検索でした。オフィスドキュメントやファイルサーバなんかにも対応しているのでWebサイトの検索にかぎらず色々使いどころがありそうです。

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら
  • スクラム実践者が知るべき97のこと
  • 著者/訳者:Gunther Verheyen / 吉羽龍太郎 原田騎郎 永瀬美穂
  • 出版社:オライリージャパン(2021-03-23)
  • 定価:¥ 2,640
  • スクラムはアジャイル開発のフレームワークですが、その実装は組織やチームのレベルに応じてさまざまです。本書はスクラムの実践において、さまざまな課題に対処してきた実践者が自らの経験や考え方を語るエッセイ集です。日本語書き下ろしコラムを追加で10本収録
  • プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける
  • 著者/訳者:Melissa Perri / 吉羽龍太郎
  • 出版社:オライリージャパン(2020-10-26)
  • 定価:¥ 2,640
  • プロダクト開発を作った機能の数やベロシティなどのアウトプットで計測すると、ビルドトラップと呼ばれる失敗に繋がります。本書ではいかにしてビルドトラップを避けて顧客に価値を届けるかを解説しています。
  • SCRUM BOOT CAMP THE BOOK 【増補改訂版】
  • 著者/訳者:西村直人 永瀬美穂 吉羽龍太郎
  • 出版社:翔泳社(2020-05-20)
  • 定価:¥ 2,640
  • スクラム初心者に向けて基本的な考え方の解説から始まり、プロジェクトでの実際の進め方やよく起こる問題への対応法まで幅広く解説。マンガと文章のセットでスクラムを短期間で理解できます。スクラムの概要を正しく理解したい人、もう一度おさらいしたい人にオススメ。
  • みんなでアジャイル ―変化に対応できる顧客中心組織のつくりかた
  • 著者/訳者:Matt LeMay / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン(2020-3-19)
  • 定価:¥ 2,640
  • アジャイルで本当の意味での成果を出すには、開発チームだけでアジャイルに取り組むのではなく、組織全体がアジャイルになる必要があります。本書にはどうやってそれを実現するかのヒントが満載です
  • レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
  • 著者/訳者:David Scott Bernstein / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン( 2019-9-18 )
  • 定価:¥ 3,132
  • レガシーコードになってから慌てるのではなく、日々レガシーコードを作らないようにするにはどうするか。その観点で、主にエクストリームプログラミングに由来する9つのプラクティスとその背後にある原則をわかりやすく説明しています。
  • Effective DevOps ―4本柱による持続可能な組織文化の育て方
  • 著者/訳者:Jennifer Davis、Ryn Daniels / 吉羽 龍太郎、長尾高弘
  • 出版社:オライリージャパン( 2018-3-24 )
  • 定価:¥ 3,888
  • 主にDevOpsの文化的な事柄に着目し、異なるゴールを持つチームが親和性を高め、矛盾する目標のバランスを取りながら最大限の力を発揮する方法を解説します
  • ジョイ・インク 役職も部署もない全員主役のマネジメント
  • 著者/訳者:リチャード・シェリダン / 原田騎郎, 安井力, 吉羽龍太郎, 永瀬美穂, 川口恭伸
  • 出版社:翔泳社( 2016-12-20 )
  • 定価:¥ 1,944
  • 米国で何度も働きやすい職場として表彰を受けているメンローの創業者かつCEOであるリチャード・シェリダン氏が、職場に喜びをもたらす知恵や経営手法、より良い製品の作り方などを惜しみなく紹介しています
  • アジャイルコーチの道具箱 – 見える化の実例集
  • 著者/訳者:Jimmy Janlén / 原田騎郎, 吉羽龍太郎, 川口恭伸, 高江洲睦, 佐藤竜也
  • 出版社:Leanpub( 2016-04-12 )
  • 定価:$14.99
  • この本は、チームの協調とコミュニケーションを改善したり、行動を変えるための見える化の実例を集めたものです。96個(+2)の見える化の方法をそれぞれ1ページでイラストとともに解説しています。アジャイル開発かどうかに関係なくすぐに使えるカタログ集です
  • カンバン仕事術 ―チームではじめる見える化と改善
  • 著者/訳者:原田騎郎 安井力 吉羽龍太郎 角征典 高木正弘
  • 出版社:オライリージャパン( 2016-03-25 )
  • 定価:¥ 2,138
  • チームの仕事や課題を見える化する手法「カンバン」について、その導入から実践までを図とともにわかりやすく解説した書籍。カンバンの原則などの入門的な事柄から、サービスクラス、プロセスの改善など、一歩進んだ応用的な話題までを網羅的に解説します。
  • Software in 30 Days スクラムによるアジャイルな組織変革“成功"ガイド
  • 著者/訳者:Ken Schwaber、Jeff Sutherland著、角征典、吉羽龍太郎、原田騎郎、川口恭伸訳
  • 出版社:アスキー・メディアワークス( 2013-03-08 )
  • 定価:¥ 1,680
  • スクラムの父であるジェフ・サザーランドとケン・シュエイバーによる著者の日本語版。ビジネス層、マネジメント層向けにソフトウェア開発プロセス変革の必要性やアジャイル型開発プロセスの優位性について説明
  • How to Change the World 〜チェンジ・マネジメント3.0〜
  • 著者/訳者:Jurgen Appelo, 前川哲次(翻訳), 川口恭伸(翻訳), 吉羽龍太郎(翻訳)
  • 出版社:達人出版会
  • 定価:500円
  • どうすれば自分たちの組織を変えられるだろう?それには、組織に変革を起こすチェンジ・マネジメントを学習することだ。アジャイルな組織でのマネージャーの役割を説いた『Management 3.0』の著者がコンパクトにまとめた変化のためのガイドブック