Sc2009autumn s2robot

3,593 views
3,456 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,593
On SlideShare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sc2009autumn s2robot

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

×