sc2009autumn s2robot
TRANSCRIPT
![Page 1: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/1.jpg)
Seasar Conference2009 Autumn
Copyright© 2002-2008 N2SM, Inc. All Rights Reserved
S2Robotで泳ぎませんか?~S2RobotとFessのご紹介~
株式会社エヌツーエスエム菅谷信介
![Page 2: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/2.jpg)
Seasar Conference 2009 Autumn
自己紹介 名前: 菅谷信介 所属: N2SM, Inc. オープンソース活動:
– Apache Portals (Jetspeed, Portals Bridges) コミッタ– Seasarプロジェクトコミッタ(S2Container, Teeda,
SAStruts, DBFlute, S2Portlet, S2Robot..)– Portal Application Laboratory(PAL)プロジェクト運
営– Fessプロジェクト運営などなど・・・
ブログ: http://d.hatena.ne.jp/shinsuke_sugaya/
![Page 3: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/3.jpg)
Seasar Conference 2009 Autumn
Agenda S2Robot の概要 S2Robot の使い方 Fess の概要 Fess の特徴 Fess の使い方
![Page 4: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/4.jpg)
Seasar Conference 2009 Autumn
S2Robot
![Page 5: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/5.jpg)
Seasar Conference 2009 Autumn
Seasar2ベースのクローラフレームワーク「クローラ (Crawler) とは、ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムである。「スパイダー」や「ロボット」などとも呼ばれ
る。」 出典: フリー百科事典『ウィキペディア(Wikipedia)』
コンポーネント化され、機能を柔軟にカスタマイズ可能
S2Robotとは
インターネットS2Robot
![Page 6: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/6.jpg)
Seasar Conference 2009 Autumn
全文検索のインデックス作成→ 一番多いパターン(だと思う)
サイトの商品情報などを抜き出し→ ページ上の特定のデータを抜き出してDBに保存するなど
SEOチェックツール→ リンク切れとか、要素数を数えるなど
クローラを開発するというニーズは意外と多いHTTP通信やページ解析が面倒だから?
→実際に面倒でした…
クローラの利用場面
![Page 7: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/7.jpg)
Seasar Conference 2009 Autumn
Webおよびローカルファイルシステムを対象 マルチスレッドクローリング 巡回する深さ、コンテンツ取得数を指定可能 巡回するコンテンツをURLでフィルタリング 柔軟に拡張可能なコンテンツ処理ルール 取得したコンテンツを指定した形式でDBに格納 画像や音声など様々なファイルから文字列抽出 robots.txt に従うクローリング
S2Robotの特徴
![Page 8: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/8.jpg)
Seasar Conference 2009 Autumn
S2プロジェクトなら dicon に追加
S2Robotのセットアップ
<components> : <include path="s2robot.dicon"/> :</components>
備考: DBを利用する場合は s2robot_db.dicon を利用
簡単に使えます!
あとは、S2Robot を DI すれば利用可能
![Page 9: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/9.jpg)
Seasar Conference 2009 Autumn
S2Robot のインスタンスを取得して実行
S2Robotの使い方(基本編)
// container から取得する場合S2Robot s2Robot = (S2Robot) container .getComponent(S2Robot.class);
// URL の追加 (この URL を起点にして巡回します)s2Robot.addUrl(url);// 巡回する深さを指定s2Robot.setMaxDepth(depth);
// クロールの実行 (実行時のセッション ID が返ります)String sessionId = s2Robot.execute();
カレントディレクトリに取得したものを保存
![Page 10: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/10.jpg)
Seasar Conference 2009 Autumn
S2Robotの処理フロー
S2Robot
S2RobotThreadS2RobotThreadS2RobotThread S2RobotClient(Web,FS)
UrlFilter WebFS
execute()
start() Check the URL
Get the Content
ResponseData
RuleManagerRule
ResponseProcessor
process()
Transformer
ResponseData
ResultData
S2Robot DB
store()AccessResult
1
2
3
4
5
6
78
9
101112
WebFSWebFS
![Page 11: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/11.jpg)
Seasar Conference 2009 Autumn
スレッド数の変更
巡回して取得するファイル数
URLキューが空のときに待つ回数
S2Robotの使い方(応用編 ~ その1)
// デフォルトのスレッド数: 10s2Robot. setNumOfThread(20);
// デフォルトの巡回取得数: 0 (無制限)s2Robot. setMaxAccessCount(10000);
// デフォルトの待つ回数: 20s2Robot. setMaxThreadCheckCount(30);
![Page 12: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/12.jpg)
Seasar Conference 2009 Autumn
バックグラウンドで実行
バックグラウンド実行後、終了を待つ
セッションIDの指定 (再実行するときなどに利用)
S2Robotの使い方(応用編 ~ その2)
// デフォルト: false (execute() した後に待つ)s2Robot. setBackground(true);
// デフォルトの待ち時間 (ms): 0 (無制限)s2Robot. awaitTermination(60000);
// デフォルトのセッションID: yyyyMMddHHmmssSSSs2Robot. setSessionId(“200909120123456”);
![Page 13: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/13.jpg)
Seasar Conference 2009 Autumn
アクセスするURLを制限することが可能 S2Robot 内の UrlFilter がアクセス先の URL を制御 アクセスできる URL を指定: addIncludeUrl()
アクセスしない URL を指定: addExcludeUrl()
デフォルトの実装 UrlFilterImpl を dicon で差し替えも可能
URLフィルタ
// 例: http://www.n2sm.net/ 以下だけにするs2Robot. addIncludeFilter(“http://www.n2sm.net/.*”);
// 例: jpg ファイルをアクセスしないs2Robot. addExcludeFilter(“.*\\.jpg”);
![Page 14: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/14.jpg)
Seasar Conference 2009 Autumn
指定されたコンテンツの取得 CommonsHttpClient: http/https からコンテンツを取得 FileSystemClient: ローカルファイルシステムから取
得 S2RobotClientFactoryがS2RobotClientを管理
clientFactory は S2Container から取得可能 client.doGet(uri) でコンテンツを ResponseData で返
す 拡張は S2RobotClient を実装して s2robot_client.dicon
で addClient に加える
S2RobotClient
// url を元に適切なクライアントを判別 (http:,https:,file:)S2RobotClient client = clientFactory.getClient(url);
![Page 15: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/15.jpg)
Seasar Conference 2009 Autumn
RuleManager: 取得したコンテンツの処理ルールを決定
Rule: コンテンツの処理内容を定義 RuleManager から Rule を取得
RuleManagerは S2Container からは取得できない (prototypeでS2Robotにセットされるため)
拡張は s2robot_rule.dicon で定義することが可能
RuleManager & Rule (その1)
// responseData を元に適切なルールを判別Rule rule = s2Robot. getRuleManager() .ruleManager.getRule(responseData);
![Page 16: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/16.jpg)
Seasar Conference 2009 Autumn
addRule で複数ルールを追加することが可能
RuleManager & Rule (その2)
<components> <include path="s2robot_transformer.dicon"/>
<component name="ruleManager" class="org.seasar.robot.rule.impl.RuleManagerImpl" instance="prototype"> <initMethod name="addRule"> <arg>fileRule</arg> </initMethod> </component>
<component name="fileRule" class="org.seasar.robot.rule.impl.RegexRule"> <property name="defaultRule">true</property> <property name="responseProcessor"> <component class="org.seasar.robot.processor.impl.DefaultResponseProcessor"> <property name="transformer">fileTransformer</property> </component> </property> </component></components>;
![Page 17: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/17.jpg)
Seasar Conference 2009 Autumn
ResponseDataを処理する DefaultResponseProcessor: 保持するTransformerを実
行
Transfomerは s2robot_rule.dicon で指定される NullResponseProcessor: 何もしない
ResponseProcessor
// RuleからResponseProcessorを取得 ResponseProcessor processor = rule.getResponseProcessor();processor.process(responseData);
![Page 18: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/18.jpg)
Seasar Conference 2009 Autumn
ResponseDataをResuleDataに変換する ResultDataは取得データを加工したものを保持
例: 画像のメタデータから文字列を取得して保存など s2robot_transfomer_basic.dicon に基本的なものを定
義
保存データを復元も可能
Transfomer (その1)
// ResponseDataをResuleDataに変換 ResultData resultData = transformer.transform(responseData);
Transfomer transfomer = container .getComponent(“fileTransfomer”);// getData() で返されるものは各Transformerで定義Object obj = transformer. getData(accessResultData);
![Page 19: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/19.jpg)
Seasar Conference 2009 Autumn
BinaryTransformer: バイナリデータをResultDataに格納
FileTransformer: カレントディレクトリにファイルとして保存
し、ResultDataにパスを格納 HtmlTransformer:
HTMLのバイナリデータと次のリンク先をResultDataに格納 XpathTransformer:
上記の拡張。指定したノードデータをXML形式で保存 TextTransformer:
文字列をResultDataに格納。Extractor機能を利用して様々な形式に対応。
Transfomer (その2)
![Page 20: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/20.jpg)
Seasar Conference 2009 Autumn
様々なファイルから文字列を取得 対応フォーマットはMS Office, pdf, zip など多数 ExtractorFactoryがExtractorを管理
extractorFactoryはS2Containerから取得可能 Extractorの単体利用も可能 (s2robot_extractor.dicon)
Extractor
Extractor extractor = extractorFactory.getExtractor(mimeType);ExtractData extractData = extractor.getText(inputStream);String content = extractData.getContent();// content に inputStream のデータ本体の文字列だけ入るfor (String key : extractData.getKeySet()) { String[] values = extractData.getValues(key); // values にはメタ情報が入る}
![Page 21: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/21.jpg)
Seasar Conference 2009 Autumn
データ格納用エンティティ AccessResult: アクセス結果のパラメータ AccessResultData: 加工後のコンテンツデータ ResponseDataとResultDataからAccessResultと
AccessResultData を生成 DataService インターフェース経由でアクセス 現在、オンメモリまたはDBに保存することが可能
AccessResult & AccessResultData
![Page 22: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/22.jpg)
Seasar Conference 2009 Autumn
AccessResultとAccessResultDataの取得や保存など S2Containerから取得することが可能 AccessResultの取得
あるセッションIDのAccessResult群を取得
DataService
// セッションIDとURLをキーにして取得AccessResult accressResult = dataService .getAccessResult(sessionId, url);
dataService.iterate(sessionId, new AccessResultCallback() { public void iterate(AccessResult accessResult) { // accessResult の処理… }});
![Page 23: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/23.jpg)
Seasar Conference 2009 Autumn
マルチスレッドクローリング→ 同期を最低限にしたり、結構がんばりが必要
壊れた HTML→ nekohtml が結構吸収してくれるけど→ 大手サイトのページでもおかしいものがあったりする…
コンテンツ取得数の指定→ マルチスレッドなので上限で止めるのが大変…
S2Robotのスレッドセーフ→ 複数のS2Robotのインスタンスを同時実行
H2Databaseのパラメータ→奥深い・・・(よくわからん)
S2Robotの苦労話 (おまけ?)
![Page 24: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/24.jpg)
Seasar Conference 2009 Autumn
データベース周りの整理 metaタグの robots に従う 壊れたURL対応(不正な文字とかを除外するフィ
ルタ) サイトマップを読む OpenOffice 系ファイル対応
S2Robotの今後
![Page 25: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/25.jpg)
Seasar Conference 2009 Autumn
Fess
![Page 26: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/26.jpg)
Seasar Conference 2009 Autumn
Javaフレンドリーな全文検索システム「全文検索(ぜんぶんけんさく、Full text search)とは、コ
ンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。」 出典: フリー百科事典『ウィキペディア(Wikipedia)』
Apacheライセンスのオープンソースプロダクト ちなみに Full tExt Search System → Fess
Fessとは
Fessサーバファイルシステム インターネット
![Page 27: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/27.jpg)
Seasar Conference 2009 Autumn
Namazu, Hyper Estraier, Senna, Rast, Nutch, Google Mini, FAST ESP, ConceptBase...
Namazu→スケールしない
Google Mini→ブラックボックス→入れ替え作業が発生する
世の中の検索システム
![Page 28: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/28.jpg)
Seasar Conference 2009 Autumn
Java (Seasar2) ベースの検索システムFessの特徴 (その1)
S2ChronosS2Container SAStruts S2Robot
DBFlute
用途に応じて柔軟に対応可能な設計
![Page 29: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/29.jpg)
Seasar Conference 2009 Autumn
標準でオールインワンで提供 Tomcat の起動で利用可能!
Fessの構成図
Tomcat
SAStruts Solr
S2Robot
H2Database
S2Chronos
Seasar2
DBFlute
fess.war solr.war
![Page 30: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/30.jpg)
Seasar Conference 2009 Autumn
S2Robot で Web とファイルシステムをクロール
様々なファイルフォーマットをサポート→テキスト(HTML,XML含む)、MS Office関
連、PDF、zipなどの圧縮ファイル、画像ファイル、音楽ファイル
ブラウザ上でクロール対象設定 検索結果のパス変換 (ローカルパスの変換と
か) クロール情報のサマリー表示
Fessの特徴 (その2) ~ S2Robotなど
![Page 31: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/31.jpg)
Seasar Conference 2009 Autumn
Luceneベースのオープンソース検索サーバー XML/HTTP や JSON の API Fess のUI から SolrJ で接続 ファセット検索 検索結果の強調表示 SHOOTIで約2億のWebページをインデックス
Fessの特徴 (その3) ~ Apache Solr
Fess ではSolrサーバーをグループ化して状態管理(ハイエンドユースを視野に入れた設計)
![Page 32: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/32.jpg)
Seasar Conference 2009 Autumn
検索サーバ・更新サーバ交換方式Solrサーバ構成例1
Fess
Solr Group 1
Solr Group 2
検索
更新
![Page 33: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/33.jpg)
Seasar Conference 2009 Autumn
レプリケーション方式Solrサーバ構成例2
Fess
Solr Group 1
Solr Group 2
検索
更新
インデックスコピー
![Page 34: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/34.jpg)
Seasar Conference 2009 Autumn
分散クロール方式Solrサーバ構成例3
Fess
Solr Group 1
Solr Group 2
検索
更新
インデックスコピー
Fess DB
![Page 35: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/35.jpg)
Seasar Conference 2009 Autumn
携帯向けアプリ構築のオープンソースフレームワーク→ 3キャリアの絵文字に対応→ 3キャリアの絵文字入りメール/添付メール/デコメールの
送信に対応→ 画像を動的にリサイズ表示→ 端末プロファイル情報などを取得可能→ GPS/GoogleMapインターフェースを提供
Fessの特徴 (その4) ~ mobylet
Fessでは各端末に最適な表示を実現
![Page 36: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/36.jpg)
Seasar Conference 2009 Autumn
検索語を入力
Fess のUI (検索結果)
![Page 37: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/37.jpg)
Seasar Conference 2009 Autumn
管理者でログイン クロール時刻、インデックス操作、モバイル変換
を設定
Fessの管理UI (クローラ設定)
![Page 38: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/38.jpg)
Seasar Conference 2009 Autumn
クロールするウェブ情報の設定管理
対象URLとフィルタ 各種パラメータ ユーザーエージェント名 ブラウザタイプ
Fessの管理UI (ウェブクロールの設定)
![Page 39: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/39.jpg)
Seasar Conference 2009 Autumn
クロールするファイルシステム情報の設定管理
対象パスとフィルタ 各種パラメータ ブラウザタイプ
Fessの管理UI (ファイルシステムクロールの設定)
![Page 40: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/40.jpg)
Seasar Conference 2009 Autumn
検索結果のリンクを書き換えるクロールした結果がファイルシステムの場合にブラウザか
らアクセスできるように書き換えるなどで利用
Fessの管理UI (パスマッピング設定)
![Page 41: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/41.jpg)
Seasar Conference 2009 Autumn
検索結果表示時にブラウザの種類で表示を切り替え
モバイルでアクセスした場合はモバイルページに移動
Fessの管理UI (ブラウザタイプ設定)
![Page 42: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/42.jpg)
Seasar Conference 2009 Autumn
Solrの状態と設定管理 グループ化された Solr に対して、コミット、最適
化、削除を実行可能
Fessの管理UI (Solr設定)
![Page 43: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/43.jpg)
Seasar Conference 2009 Autumn
クロール結果の情報表示
クロール時間 インデックス数
Fessの管理UI (セッション情報)
![Page 44: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/44.jpg)
Seasar Conference 2009 Autumn
プロジェクトサイト:http://fess.sourceforge.jp/ja/
Fess Server 1.0.0 が利用可能
Fess の情報
要望などあればお知らせください
![Page 45: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/45.jpg)
Seasar Conference 2009 Autumn
認証サイトへのアクセス ログファイルのダウンロード リクエストヘッダーの付加 重複ドメインの除外 ロールによる検索結果の出しわけ ラベル付け Solr のアップグレード
Fess の今後
![Page 46: Sc2009autumn s2robot](https://reader033.vdocuments.mx/reader033/viewer/2022060115/55780d4ad8b42aa5488b51c0/html5/thumbnails/46.jpg)
Seasar Conference 2009 Autumn
ありがとうございました