Nutchというクローラ、インデクサ、検索を行なうオープンソースがあったので、
軽く触ってみた。
Nutch内部ではLucene、Hadoopが動作してるようなので、勉強にはちょうどいいかと思う。
早速、インストールから動作までの解説をする。
■クローラ
1.Nutch本体ダウンロード、解凍
# tar -xvzf nutch-0.9.tar.gz
# mv nutch-0.9 /usr/local/nutch
2.環境変数にパスを通す
# vi /etc/bashrc
export NUTCH_HOME=/usr/local/nutch
export PATH=${NUTCH_HOME}/bin:${PATH}
# source /etc/bashrc
3.クロール先を決める
クロール先URLリストを作成する。
今回は2サイトをクロールする予定。
# cd ${NUTCH_HOME}
# mkdir crawl_urls
# vi crawl_urls/corporate_sites
http://www.datasection.co.jp/
# vi crawl_urls/blogs
http://blog.mikuriya.biz/
要は作成したディレクトリcrawl_urls以下に1行1URLで
クロールしたいサイトの開始位置をどんどん記述するってことみたい。
4.クロールのフィルタ設定
今回のクロール対象は2サイトなので、それ以外はクロールしたくない。
以下のファイルに正規表現でフィルタリングを行なう。(正規表現はJava仕様)
# cd ${NUTCH_HOME}
# vi conf/crawl-urlfilter.txt
(修正前)
+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
(修正後)
+^http://www\.datasection\.co\.jp/
+^http://blog\.mikuriya\.biz/
※よく見ると先頭に「+」とか「-」が入ってる。
クロールしたいURLパターンは「+」、クロールしたくないURLパターンは「-」を
このファイルに追加していくようだ。
5.クロール設定
クロール用の設定ファイルは初期段階では何も書かれていないので、
nutch-default.xmlをそのままコピーしてくる。
# cat conf/nutch-default.xml > nutch-site.xml
nutch-site.xmlの「http.agent.name」は必須っぽい。適当な名前をつけて。
私の場合は、クロールしたデータを「/usr/local/nutch/crawl_data」に
格納したいので以下を編集した。
# vi conf/nutch-site.xml
<property>
<name>searcher.dir</name>
<value>/usr/local/nutch/crawl_data</value> ← ここを編集した
<description>
...
</description>
</property>
nutch-site.xmlには、propertyのdescription属性に
設定の説明が書いてあるので、各自適当に読んで設定してもらいたい。
6.クロール開始
# /usr/local/nutch/bin/nutch crawl /usr/local/nutch/crawl_urls -dir /usr/local/nutch/crawl_data -depth 3 -topN 50 &
※なおcrawl_dataは勝手に作成されるので、いちいち作らなくてよい。
■WEBアプリケーション
Tomcatからクロールしたデータを検索表示することができるので、その設定を行なう。
${NUTCH_HOME}/nutch-0.9.warがその実体。
# cd ${NUTCH_HOME}
# mkdir nutch_web
# cp nutch-0.9.war nutch_web/
# cd nutch_web
# unzip nutch-0.9.war
解凍したアプリケーションの設定ファイルには、何も書かれていないので
クロール用で使用した設定ファイルを上書きしてやる。
# cp conf/nutch-site.xml nutch_web/WEB-INF/classes/nutch-site.xml
Tomcatで見れるようにシンボリックリンクを貼る。
# cd /usr/local/tomcat/webapps
# ln -s /usr/local/nutch/nutch_web nutch
Tomcat起動
# /usr/local/tomcat/bin/startup.sh
■検索結果のウェブ画面

形態素解析器Senの導入(日本語対応)、Hadoopによる分散(複数のサーバで運用)、
その他パフォーマンスなどは、もったいないから教えない。
■参考URL:
http://dev.team-lab.com/index.php?itemid=120
http://kazuhiro.ty.land.to/blog/2007/01/nutch.html