SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
Seasar Conference
                                                                2009 Autumn




S2Robotで泳ぎませんか?
 ~S2RobotとFessのご紹介~   


                  株式会社エヌツーエスエム
                          菅谷信介



     Copyright© 2002-2008 N2SM, Inc. All Rights Reserved
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/
Seasar Conference 2009 Autumn


Agenda
   S2Robot の概要
   S2Robot の使い方
   Fess の概要
   Fess の特徴
   Fess の使い方
Seasar Conference 2009 Autumn




S2Robot
Seasar Conference 2009 Autumn


S2Robotとは
   Seasar2ベースのクローラフレームワーク
    「クローラ (Crawler) とは、ウェブ上の文書や画像などを
    周期的に取得し、自動的にデータベース化するプログラム
    である。「スパイダー」や「ロボット」などとも呼ばれ
     る。」
            出典: フリー百科事典『ウィキペディア(Wikipedia)』




         S2Robot         インターネット



   コンポーネント化され、機能を柔軟にカスタマイ
    ズ可能
Seasar Conference 2009 Autumn


クローラの利用場面
   全文検索のインデックス作成
    → 一番多いパターン(だと思う)
   サイトの商品情報などを抜き出し
    → ページ上の特定のデータを抜き出してDBに保存するなど
   SEOチェックツール
    → リンク切れとか、要素数を数えるなど




    クローラを開発するというニーズは意外と多い
         HTTP通信やページ解析が面倒だから?
              →実際に面倒でした…
Seasar Conference 2009 Autumn


S2Robotの特徴
   Webおよびローカルファイルシステムを対象
   マルチスレッドクローリング
   巡回する深さ、コンテンツ取得数を指定可能
   巡回するコンテンツをURLでフィルタリング
   柔軟に拡張可能なコンテンツ処理ルール
   取得したコンテンツを指定した形式でDBに格納
   画像や音声など様々なファイルから文字列抽出
   robots.txt に従うクローリング
Seasar Conference 2009 Autumn


S2Robotのセットアップ
   S2プロジェクトなら dicon に追加

    <components>
      :
      <include path="s2robot.dicon"/>
      :
    </components>

              あとは、S2Robot を DI すれば利用可能
         備考: DBを利用する場合は s2robot_db.dicon を利用


                   簡単に使えます!
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();

           カレントディレクトリに取得したものを保存
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
Seasar Conference 2009 Autumn


S2Robotの使い方(応用編 ~ その1)
   スレッド数の変更

    // デフォルトのスレッド数: 10
    s2Robot. setNumOfThread(20);

   巡回して取得するファイル数

    // デフォルトの巡回取得数: 0 (無制限)
    s2Robot. setMaxAccessCount(10000);

   URLキューが空のときに待つ回数

    // デフォルトの待つ回数: 20
    s2Robot. setMaxThreadCheckCount(30);
Seasar Conference 2009 Autumn


S2Robotの使い方(応用編 ~ その2)
   バックグラウンドで実行

    // デフォルト: false (execute() した後に待つ)
    s2Robot. setBackground(true);

   バックグラウンド実行後、終了を待つ

    // デフォルトの待ち時間 (ms): 0 (無制限)
    s2Robot. awaitTermination(60000);

   セッションIDの指定 (再実行するときなどに利用)

    // デフォルトのセッションID: yyyyMMddHHmmssSSS
    s2Robot. setSessionId(“200909120123456”);
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 で差し替えも可能
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
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 で定義することが可能
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>;
Seasar Conference 2009 Autumn


ResponseProcessor
   ResponseDataを処理する
   DefaultResponseProcessor: 保持するTransformerを実
    行
    // RuleからResponseProcessorを取得
    ResponseProcessor processor = rule.getResponseProcessor();
    processor.process(responseData);


   Transfomerは s2robot_rule.dicon で指定される
   NullResponseProcessor: 何もしない
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);
Seasar Conference 2009 Autumn


Transfomer (その2)
   BinaryTransformer:
    バイナリデータをResultDataに格納
   FileTransformer:
    カレントディレクトリにファイルとして保存
     し、ResultDataにパスを格納
   HtmlTransformer:
    HTMLのバイナリデータと次のリンク先をResultDataに格納
   XpathTransformer:
    上記の拡張。指定したノードデータをXML形式で保存
   TextTransformer:
    文字列をResultDataに格納。Extractor機能を利用して様々な
     形式に対応。
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)
Seasar Conference 2009 Autumn


AccessResult & AccessResultData
   データ格納用エンティティ
   AccessResult: アクセス結果のパラメータ
   AccessResultData: 加工後のコンテンツデータ
   ResponseDataとResultDataからAccessResultと
    AccessResultData を生成
   DataService インターフェース経由でアクセス
   現在、オンメモリまたはDBに保存することが可能
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 の処理…
       }
    });
Seasar Conference 2009 Autumn


S2Robotの苦労話 (おまけ?)
   マルチスレッドクローリング
    → 同期を最低限にしたり、結構がんばりが必要
   壊れた HTML
    → nekohtml が結構吸収してくれるけど
    → 大手サイトのページでもおかしいものがあったりする…
   コンテンツ取得数の指定
    → マルチスレッドなので上限で止めるのが大変…
   S2Robotのスレッドセーフ
    → 複数のS2Robotのインスタンスを同時実行
   H2Databaseのパラメータ
    →奥深い・・・(よくわからん)
Seasar Conference 2009 Autumn


S2Robotの今後
   データベース周りの整理
   metaタグの robots に従う
   壊れたURL対応(不正な文字とかを除外するフィ
    ルタ)
   サイトマップを読む
   OpenOffice 系ファイル対応
Seasar Conference 2009 Autumn




Fess
Seasar Conference 2009 Autumn


Fessとは
   Javaフレンドリーな全文検索システム
    「全文検索(ぜんぶんけんさく、Full text search)とは、コ
     ンピュータにおいて、複数の文書(ファイル)から特定
     の文字列を検索すること。」       出典: フリー百科事典
     『ウィキペディア(Wikipedia)』




ファイルシステム           Fessサーバ      インターネット


   Apacheライセンスのオープンソースプロダクト
   ちなみに Full tExt Search System → Fess
Seasar Conference 2009 Autumn


世の中の検索システム
 Namazu, Hyper Estraier, Senna, Rast, Nutch,
  Google Mini, FAST ESP, ConceptBase...
 Namazu
    →スケールしない
   Google Mini
    →ブラックボックス
    →入れ替え作業が発生する
Seasar Conference 2009 Autumn


Fessの特徴 (その1)
   Java (Seasar2) ベースの検索システム


                                              DBFlute




                                     S2Chronos
                   S2Container SAStruts S2Robot




      用途に応じて柔軟に対応可能な設計
Seasar Conference 2009 Autumn


Fessの構成図
   標準でオールインワンで提供
   Tomcat の起動で利用可能!

                      fess.war                       solr.war
      S2Robot              S2Chronos

      SAStruts              DBFlute     H2Database       Solr

                 Seasar2


                               Tomcat
Seasar Conference 2009 Autumn


Fessの特徴 (その2) ~ S2Robotなど
 S2Robot で Web とファイルシステムをクロー
  ル
 様々なファイルフォーマットをサポート
    →テキスト(HTML,XML含む)、MS Office関
     連、PDF、zipなどの圧縮ファイル、画像ファイ
     ル、音楽ファイル
 ブラウザ上でクロール対象設定
 検索結果のパス変換 (ローカルパスの変換と
  か)
 クロール情報のサマリー表示
Seasar Conference 2009 Autumn


Fessの特徴 (その3) ~ Apache Solr
   Luceneベースのオープンソース検索サーバー
   XML/HTTP や JSON の API
   Fess のUI から SolrJ で接続
   ファセット検索
   検索結果の強調表示
   SHOOTIで約2億のWebページをインデックス


Fess ではSolrサーバーをグループ化して状態管理
       (ハイエンドユースを視野に入れた設計)
Seasar Conference 2009 Autumn


Solrサーバ構成例1
   検索サーバ・更新サーバ交換方式



                 検索

                      Solr Group 1


          Fess   更新




                      Solr Group 2
Seasar Conference 2009 Autumn


Solrサーバ構成例2
   レプリケーション方式



                 更新

                         Solr Group 1
                      インデックスコピー
          Fess
                 検索




                           Solr Group 2
Seasar Conference 2009 Autumn


Solrサーバ構成例3
   分散クロール方式


                        更新


                            Solr Group 1
                         インデックスコピー

                 Fess   検索



                              Solr Group 2
       Fess DB
Seasar Conference 2009 Autumn


Fessの特徴 (その4) ~ mobylet
   携帯向けアプリ構築のオープンソースフレーム
    ワーク
    → 3キャリアの絵文字に対応
    → 3キャリアの絵文字入りメール/添付メール/デコメールの
      送信に対応
    → 画像を動的にリサイズ表示
    → 端末プロファイル情報などを取得可能
    → GPS/GoogleMapインターフェースを提供



Fessでは各端末に最適な表示を実現
Seasar Conference 2009 Autumn


Fess のUI (検索結果)
   検索語を入力
Seasar Conference 2009 Autumn


Fessの管理UI (クローラ設定)
   管理者でログイン
   クロール時刻、インデックス操作、モバイル変換
    を設定
Seasar Conference 2009 Autumn


Fessの管理UI (ウェブクロールの設定)
   クロールするウェブ情報の設定管理

   対象URLとフィルタ
   各種パラメータ
   ユーザーエージェント名
   ブラウザタイプ
Seasar Conference 2009 Autumn


Fessの管理UI (ファイルシステムクロールの設定)
   クロールするファイルシステム情報の設定管理

   対象パスとフィルタ
   各種パラメータ
   ブラウザタイプ
Seasar Conference 2009 Autumn


Fessの管理UI (パスマッピング設定)
   検索結果のリンクを書き換える
    クロールした結果がファイルシステムの場合にブラウザか
     らアクセスできるように書き換えるなどで利用
Seasar Conference 2009 Autumn


Fessの管理UI (ブラウザタイプ設定)
   検索結果表示時にブラウザの種類で表示を切り替
    え
   モバイルでアクセスした場合はモバイルページに
    移動
Seasar Conference 2009 Autumn


Fessの管理UI (Solr設定)
   Solrの状態と設定管理
   グループ化された Solr に対して、コミット、最適
    化、削除を実行可能
Seasar Conference 2009 Autumn


Fessの管理UI (セッション情報)
   クロール結果の情報表示

   クロール時間
   インデックス数
Seasar Conference 2009 Autumn


Fess の情報
   プロジェクトサイト:
    http://fess.sourceforge.jp/ja/
   Fess Server 1.0.0 が利用可能


    要望などあればお知らせください
Seasar Conference 2009 Autumn


Fess の今後
   認証サイトへのアクセス
   ログファイルのダウンロード
   リクエストヘッダーの付加
   重複ドメインの除外
   ロールによる検索結果の出しわけ
   ラベル付け
   Solr のアップグレード
Seasar Conference 2009 Autumn




ありがとうございました

Mais conteúdo relacionado

Mais procurados

Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Shinsuke Sugaya
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころShinsuke Sugaya
 
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Issei Nishigata
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門Shinsuke Sugaya
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Yo Takezawa
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようShinsuke Sugaya
 
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介takanori suzuki
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールShinsuke Sugaya
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Shinsuke Sugaya
 
Mroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦いMroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦いNaoya Murakami
 
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002Takeshi Kuramochi
 
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト類義語検索と類義語ハイライト
類義語検索と類義語ハイライトShinichiro Abe
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストAkihiro Kuwano
 

Mais procurados (20)

Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門
 
Terraform
TerraformTerraform
Terraform
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
Mroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦いMroongaを使ったときの MySQLの制限との戦い
Mroongaを使ったときの MySQLの制限との戦い
 
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
 
12 cyberagent
12 cyberagent12 cyberagent
12 cyberagent
 
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
 
Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
類義語検索と類義語ハイライト
類義語検索と類義語ハイライト類義語検索と類義語ハイライト
類義語検索と類義語ハイライト
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
 

Semelhante a Sc2009autumn s2robot

Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Keisuke Fujikawa
 
SAStruts Seminar In Tripodworks
SAStruts Seminar In TripodworksSAStruts Seminar In Tripodworks
SAStruts Seminar In Tripodworkstripodworks
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressAkinari Tsugo
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大openrtm
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413Funato Takashi
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーションMasahito Zembutsu
 
Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )ロフト くん
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~Naoki (Neo) SATO
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京Yu Ito
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係moai kids
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうDevTakas
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsShinji Tamura
 

Semelhante a Sc2009autumn s2robot (20)

Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
 
SAStruts Seminar In Tripodworks
SAStruts Seminar In TripodworksSAStruts Seminar In Tripodworks
SAStruts Seminar In Tripodworks
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
G0042 h
G0042 hG0042 h
G0042 h
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspoints
 

Mais de Shinsuke Sugaya

社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウShinsuke Sugaya
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法Shinsuke Sugaya
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画Shinsuke Sugaya
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門Shinsuke Sugaya
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバShinsuke Sugaya
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムShinsuke Sugaya
 

Mais de Shinsuke Sugaya (6)

社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 

Último

20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 

Último (12)

20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 

Sc2009autumn s2robot

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