FessでPDF全文検索サイトを作成する

色々と調べてみたら、FessというシステムでPDF全文検索ができると知りました。LINUXでも動くらしい。以前はCGI のNamazuを使って構築したことがありましたが、最近は更新もなく、こちらのFessの方がスタンダードっぽいです。

公式サイトはこちらです。

http://fess.codelibs.org/ja/articles/article-1.html

例によって私はDebian使い。手元にサーバが無かったので、お年玉クーポン3万円を配布していたAltusを利用してUbuntuディストリビューションで構築してみます。

JDKのインストール

apacheのインストール

構築した後で分かりましたがapacheはFessの動作自体には必要ありません。80番でアクセスさせたい時に利用します。Fessデフォルトの起動ポート8080でアクセスさせる際には必要ないです。同じサーバで、webサイト公開したいのなら必要です。webサイトで公開しているhtml,txtその他PDFファイルなどをクロールして検索する事ができる。

debファイルがあったので、こちらで構築しようとしましたが起動せず。なんでだろう。

Fess 11.4.5の取得(2017.12.18)

fessのインストール

/usr/shar/fess/bin にインストールされる

起動しようとしたら起動しないので削除

うまくインストールできたとおもったのですが。

気を取り直してzipバージョンを取得
wget https://github.com/codelibs/fess/releases/download/fess-11.4.5/fess-11.4.5.zip

zipを解凍
unzip fess-11.4.5.zip

名前をfessに変更して配置
mv fess-11.4.5 /usr/share/fess

fess を実行
/usr/share/fess/bin# ./fess
無事起動するようになりました。

注意情報
fessは、初期動作が遅くて。ホームページが表示されるまでに5分以上かかる。あまりにも遅くて、「あれサーバ起動しているはずなのに動かないってなる。」根気強く待つと、安定稼働始める。

fess01.jpg

http://ホスト名:8080

初期パスワードは下記の通り

ユーザ名:admin
パスワード:admin

http://fess.codelibs.org/ja/articles/article-1.html#id11

この手順に従って行けばインデックスが作成され検索できるようになるはず。私は今回web検索でヒットするように設定したが、なかなか思うような結果が出ずに苦労した。詳細は次の項目で。

fess05.jpg

クローラーというボットが、情報を集める行為。Googleのウェブクローラーは[Googlebot]という名称。巡回ロボット。クローラーが情報を収集する行為をクロールといい、fessでもcrawlerという名称でクロールの設定ができる。webサイトの情報を集める事。クローラーはリンクをたどってクロールされるので、リンクがなければクロールされない。

注意1 そもそもPDF内のテキストは大丈夫か?

OCRで読み取りを行った際に、古いアプリや、書籍自体も古く紙が劣化していると、スキャンデータ自体が文字化けしている事があります。この状態ではいくらクロールかけても検索結果は出てきません。一度、PDFの文字列をコピーしてテキストなどに貼り付けてみてください。これでちゃんと読める状態ならクロールをかけて検索できるようになります。fessの検索機能は画像検索で文字列に変換してなんて事はできないので、PDF東名テキストがしっかりあるかどうかは大きなポイントです。

http://fess.codelibs.org/ja/11.3/config/crawler.html

デフォルトでは HTML ファイルは 2.5M バイト、それ以外は 10M バイトまで処理します。 扱うファイルサイズを変更したい場合は app/WEB-INF/classes/crawler/contentlength.xml を編集します。

10485760

“text/html”
2621440

編集した後はfess本体を再起動する必要があります。私は、まだこの時点で起動スクリプトrc2.d作成していませんので、プロセスを探して直接Killしました。

fess-crawler.logに
06:52:34,987 [Crawler-20171220065154-1-1-pdf] WARN Using fallback font LiberationSans for CID-keyed TrueType font MSGothic
2017-12-20
と表示され、PDF内の文字がクロールされない場合、こちらを参考にしました。

https://github.com/codelibs/fess/issues/1157

http://fess.codelibs.org/10.1/admin/webconfig-guide.html#config-parameters

にて、設定パラメータに
crawler.ignore.robots.txt=false

とする事でクロールされるようになった。

10:22:37,115 [Crawler-20171220094722-1-1] ERROR Crawling Exception at http://fess.hanako.or.jp/hanako1992.pdf
java.lang.OutOfMemoryError: Java heap space

contentlength.xmlの扱うファイルサイズを大きくしても、JAVAがヒープスペースを確保できなくてOutOfMemoryErrorが出てしまう事があります。仕方がないので、サーバのメモリ容量を上げて対応です。ALTUSのクラウドサーバを試験利用していて、こちらをm1.smallから、m1.largeへ変更。

m1.smallは1コアvCPU / 2GBメモリ

m1.largeは2コアvCPU / 8GBメモリ

うーんお金かかる。とりあえず、Indexを作る時だけlargeにしようかな。

http://fess.codelibs.org/ja/11.3/config/system.html#id3

FESS_MIN_MEM=512m

だったものを

FESS_MIN_MEM=2g

に変更しました。MAX_MEM = 2gなんで、勝手に可変してくれるんじゃないかと思うのですが、私の場合はこれで正常クロールされるようになりました。

設定変更後は再起動が必要です。

ウェブファイルをクロールする設定にする場合は、アクセスできるHTMLからリンクが張られている必要があります。指定したディレクトリを自動的にクロールしてくれるわけではありません。リンクが必要です。リンク先をどんどんクロールしてくれます。

ウェブクロールの設定を行います。

クロールの開始

システム⇒スケジューラ⇒Default Crawler

を、いますぐ開始します。

fess05.jpg

クロールが完了しているか確認します。

fess04.jpg

webでクロールする場合は、検索対象からさらにリンクが張られている事を確認します。リンクがないと、検索されません。

クロール設定で、クロール対象とするURLを設定するのはいいですが、URLで指定した以外はクロールされなくなってしまうため、
http://ホスト名/.*

の.*を忘れないようにします。これを忘れると、http://ホスト名/しかクロールしてくれない事になり、index.htmlなどデフォルトで表示できるようにしているwebサイトしかクロールされなくなります。

PDF全文検索システムを、WordPressで簡単に作成できないかと探してみたところ、Search Everything というプラグインがある事が分かりました。チャレンジしてみたのですが、思った通りの結果は出ませんでした。また、インデックス作成タイプでもないので、もし動いたとしても処理速度は遅いだろうと思います。

一応完了できなかったのですが、下記はメモで残しておきます。

WordPressで、全文検索サイトを作ってみようとチャレンジしてみました。Search Everything

投稿や、記事だけでなく、PDFの全文検索サイトを作成してみます。

Search Everything

WordPressのデフォルト検索機能を向上させます。ページ、抜粋、添付ファイル、下書き、コメント、タグ、カスタムフィールド(メタデータ)を検索するように設定し、独自の検索ハイライトスタイルを指定することができます。

検索速度も気になるところです。

プラグイン Search Everythingのインストール

Serch Everythingプラグインを探し、インストール有効化します。

Serch Everythingオプション変更

everysearch01.png

すべてのメディア (アップロードファイル) を検索: にチェックを入れます。

 

これで検索されるはずなのですが、ファイルサイズが大きすぎるのか検索できませんでした。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です