この情報は古い可能性があります!

Namazuよりも高性能(?)という噂のhyperestraierを使った
検索エンジンの構築をやってみます。
といってもぶっちゃけ公式HPのものを見てやりながら書いているので
ほとんど変わらないですね。。。

注: 作者がTokyo Cabinet、Kyoto Cabinetへの作成に注力しているようで、実質HyperEstraierは開発停止です。

HP http://hyperestraier.sourceforge.net

HP http://fallabs.com/ に変更

Nutchでもやるかなぁ。Apacheもなんか出してるし暇ができたらやってみますか。

必要なもの

  • libiconv : 文字コード変換。バージョン1.9.1以降(glibcにも同梱)。
  • zlib : 可逆データ圧縮。バージョン1.2.1以降。
  • QDBM : 組み込み用データベース。バージョン1.8.68以降。

恐らくlibiconvとzlibは入っているため、QDBMをインストールします。
また、分かち書き?にめかぶをつかいます。

QDBMのインストール

cd /usr/local/src
wget http://qdbm.sourceforge.net/qdbm-1.8.77.tar.gz
tar zxvf qdbm-1.8.77.tar.gz
cd qdbm-1.8.77

./configure --enable-zlib
make
make install

Mecabのインストール

cd /usr/local/src
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.97.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20070801.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/mecab/mecab-jumandic-5.1-20070304.tar.gz

tar zxvf mecab-0.97.tar.gz
cd mecab-0.97
./configure --with-charset=utf8
make
make install

cd ../
tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf-8
make
make install

cd ../
tar zxvf mecab-jumandic-5.1-20070304.tar.gz
cd mecab-jumandic-5.1-20070304
./configure --with-charset=utf-8
make
make install

hyperestraierのインストール

cd /usr/local/src
wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.13.tar.gz
tar zxvf hyperestraier-1.4.13.tar.gz
cd hyperestraier-1.4.13
./configure --enable-mecab
make
make install

ローカルのみの検索システムを構築

mkdir /usr/local/hyperestraier
cd /usr/local/hyperestraier
estcmd gather -il ja -sd momo-i /usr/local/apache/htdocs

gatherはインデックス生成のオプションです。

  • il jaは文字コード判定に日本語を優先させるという意味です。
  • sdはファイルの作成日時と更新日時をインデックスに記録するという意味です。
    実行すると、進捗状態のログメッセージが出てから、
    momo-iというディレクトリが作成されます。
    このディレクトリがインデックスです。
    インデックスの作成に必要な手順はこれだけです。

検索用スクリプトの配置

cp /usr/local/libexec/estseek.cgi /usr/local/apache/cgi-bin
cp /usr/local/share/hyperestraier/locale/ja/* /usr/local/apache/cgi-bin

検索用のコンフィグ設定

cd /usr/local/apache/cgi-bin
vi estseek.conf

変更点のみ
indexname: momo-i
replace: ^file:///usr/local/apache/htdocs/{{!}}http://localhost/

http://localhost/cgi-bin/estseek.cgiにアクセスをして
検索が出来ることを確認

インデックスの更新作業

cd /usr/local/hyperestraier
estcmd gather -cl -il ja -sd -cm momo-i /usr/local/apache/htdocs

元のファイルがなくなったりしたときとかに検索対象からも削除する
estcmd purge -cl momo-i

インデックスの最適化
estcmd optimize momo-i

削除と最適化は1週間にいっぺん程度で十分です。

Webクローラを使ってみる

検索するならGoogleとかYahooとかあるますが、検索ワード入れても
実際にこれって言うのが見つからないときってあるますよね。

ということで、自分の持ってるお気に入りとかを自動巡回させて特定のジャンルとかの
Web検索エンジンを設定するます。(hyperestraierはインストール済みとして進めます)

クローラのルートディレクトリの作成

cd /usr/local/hyperestraier
estwaver init test

initするとtestディレクトリ配下に以下のディレクトリ・ファイルが作成されます。

_conf : 設定ファイル。
_log : ログファイル。クローラのイベントログを記録します。
_meta : メタデータのデータベースファイル。重複起動防止のロック機構も兼ねます。
_queue : 巡回先のプライオリティキューのデータベースファイル。
_trace/ : 巡回記録のデータベースディレクトリ。
_index/ : インデックスディレクトリ。
_tmp/ : テンポラリファイルを入れるディレクトリ。

次にクローラの設定をします。
www.example.comとtest.example.comを巡回する設定を入れますが、
example.comドメイン以外のドメインへのリンクを制御するためallowrxを使って
example.comドメイン以外のドメインへはアクセスをしないようにします。

/usr/local/hyperestraier/test/_conf

seed: 1.0|http://www.example.com/
seed: 1.0|http://test.example.com/
allowrx: ^http://[^/]*\.example.com/

設定が終わったら以下のコマンドで巡回をして見ましょう。

estwaver crawl -revcont /usr/local/hyperestraier/test

オプションにつけてる-revcontは以前に収集した文書の
再取得を行った後にクローリングを継続するので便利です。

巡回が終了したらhttp://localhost/cgi-bin/estseek.cgiへアクセスをして、
検索が出来ることを確認します。

後は定期的にクーロンで実行をするように設定しておけば問題なしです。

注意点としては巡回中は検索が出来なくなるため、巡回させる場合は
ルートディレクトリをコピーして、コピーしたもので巡回後元に戻すという作業をするといいです。

参考までにうちで使っていたスクリプトです。(現在停止中)

#!/bin/bash

command="/usr/local/bin/estwaver crawl -revcont"
dir="/usr/local/hyperestraier/test"
tmpdir="/usr/local/hyperestraier/test.tmp"

if [ ! -r $tmpdir ]; then

cp -r $dir $tmpdir
$command $tmpdir

rm -rf $dir
mv $tmpdir $dir

fi

if [ `date +%u` == "7" ]; then

/usr/local/bin/estcmd optimize $dir/_index

fi

アップグレード

アップグレードするときは一旦アンインストールを走らせないと
テストでエラーになります。

cd /usr/local/src/hyperestraier-x.x.xx
make uninstall
cd /usr/local/src/qdbm-x.x.xx
make uninstall

後はまた適当にやりますか。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
半角で
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。
ももーい に投稿