AlfrescoとSolr- Alfresco勉強会 第11回 -                                      2012/11/7 @mryoshio                       Copyright...
目次‣ 自己紹介‣ AlfrescoとSolr‣ アーキテクチャ‣ インストール,設定‣ ソースコード解説‣ おわりに
自己紹介‣ mryoshio  → A社の社員  → AlfrescoやLiferayのコンサルタント  → ソースコードを読んだりカスタマイズしたり  → Twitterとか色々なところにいます  → Solr/Lucene周りで遊びたいけど...
AlfrescoとSolr
Alfrescoとは‣ 何? → 英Alfresco社が提供するオープンソースソフトウェア。企業規模のコンテンツ   管理を行える。それ以外に,Webコンテンツ管理やコラボレーションを低コ   ストで行える‣ 似た機能をもつ製品は? → Sha...
Solrとは‣ エンタープライズ検索プラットフォーム → Apache Luceneプロジェクトから派生した人気のある検索プラット   フォーム。ヒット部分のハイライト,ファセットサーチなど豊富な機   能がある。スケーラブルで分散した検索やイ...
Alfresco Solr Plugin‣ 内包LuceneでなくでなくSolrで検索を行う‣ Alfrescoクラスタリングを行う場合,  検索インデクスのレプリケーションが不要‣ 基本的に外部のSolrインスタンスへ  HTTPベースで問い...
メリット,デメリット‣ メリット → 前頁を参照‣ デメリット → WCMを使えない → RMモジュールを使えない → マルチテナントを使えない → トランザクション内でのインデクシングなど   一貫性を重視する場合には使えない        ...
(参考)スクリーンショット
アーキテクチャ
パターン1:AlfrescoとSolrが別居
パターン2:AlfrescoとSolrが同居
インストール,設定
Alfrescoのインストール‣ 過去の勉強会資料を参照 → http://www.slideshare.net/mryoshio/alfresco-install‣ alfresco-community-4.0.e.zipをダウンロード → ...
SolrおよびSolr Pluginのインストール‣ 過去の勉強会資料を参照  → http://www.slideshare.net/TasukuOtani/    alfrescostudy4alfresco4solrintegration...
動作確認‣ Alfresco Tomcatのlog4j.propertiesへ追記    → log4j.logger.org.alfresco.repo.search.impl.solr.SolrQueryHTTPC      lient=d...
動作確認‣ Solrを起動     → 再度Alfrescoにて検索を実行 => catalina.outへログが出力される2012-10-24 15:45:54,157 DEBUG [impl.solr.SolrQueryHTTPClient...
ソースコード解説
Alfresco Solr Plugin側‣ solr-tomcat-context.xml‣ solr.xml‣ AlfrescoCoreAdminHandler‣ CoreTracker‣ CoreWatcherJob‣ CoreTrack...
solr-tomcat-context.xml‣ Solrのコンテキストを設定するためのファイル‣ ${TOMCAT_HOME}/conf/Catalina/localhost/  solr.xmlとして配置‣ solr.homeを設定<?xm...
solr.xml‣ ${SOLR_HOME}/solr.xml‣ 前頁の ${TOMCAT_HOME}/conf/Catalina/  localhost/solr.xmlとは異なるもの‣ Solrのマルチコア機能を使い複数のコアを設定    ...
AlfrescoCoreAdminHandler‣ マルチコアのハンドリングを行う      → CoreAdminHandlerを継承      → coreを指定したactionリクエストを処理      → handleCustomAct...
CoreTracker‣ インデクスのトラッキングを行う → CloseHookを継承 → solrcore.propertiesから読み込んだcoreの情報を保持   (e.g. alfresco.host) → Jobのスケジューリング →...
CoreWatcherJob‣ スケジューリングされるジョブ → org.quartz.Jobを継承 → AlfrescoCoreAdminHandlerでジョブとして生成される → AlfrescoCoreAdminHandlerとCoreT...
CoreTrackerJob‣ インデクスのトラッキングを行うジョブ → org.quartz.Jobを継承 → CoreTrackerのupdateIndexメソッドを実行するジョブとなる → 重要なメソッド    L.42 execute ...
Alfresco側‣ SolrSearchService‣ SolrQueryHTTPClient‣ Alfresco Solr Pluginへ情報を渡すWebScript
SolrSearchService‣ Solrを使う場合のSearchService  → org.alfresco.service.cmr.search.SearchServiceを継承  → 重要なメソッド     L.137 query ...
SolrQueryHTTPClient‣ Solrへのリクエストの組立,実行を行う  → 重要なメソッド    L.133 executeQuery ... 検索URL組立,リクエスト送信,結果の返却を実行
情報を渡すWebScript‣ Alfresco Solr PluginへAlfrescoの情報を渡す → webapps/alfresco/WEB-INF/classes/alfresco/templates/   webscripts/or...
おわりに
参考‣ http://aegif-labo.blogspot.jp/2012/08/  solrssl.html‣ http://wiki.alfresco.com/wiki/  Alfresco_And_SOLR‣ http://docs.a...
Copyright 2012 tachibanakikaku.com. All rights reserved.
Upcoming SlideShare
Loading in...5
×

AlfrescoとSolr(中編)

2,135

Published on

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

No Downloads
Views
Total Views
2,135
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
48
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • &amp;#x30C8;&amp;#x30E9;&amp;#x30F3;&amp;#x30B6;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x5185;&amp;#x3067;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30C7;&amp;#x30AF;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;~ ... WebScript&amp;#x5185;&amp;#x3067;&amp;#x30B3;&amp;#x30F3;&amp;#x30C6;&amp;#x30F3;&amp;#x30C4;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x76F4;&amp;#x5F8C;&amp;#x306B;&amp;#x691C;&amp;#x7D22;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x7B49;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • &amp;#x5B9F;&amp;#x969B;&amp;#x306B;&amp;#x306F;&amp;#x3053;&amp;#x3053;&amp;#x3067;Solr&amp;#x672C;&amp;#x4F53;&amp;#x3082;&amp;#x5165;&amp;#x308C;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x306A;&amp;#x308B;&amp;#x3002;\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 9&amp;#x3064;\n
  • \n
  • \n
  • \n
  • AlfrescoとSolr(中編)

    1. 1. AlfrescoとSolr- Alfresco勉強会 第11回 - 2012/11/7 @mryoshio Copyright 2012 tachibanakikaku.com. All rights reserved.
    2. 2. 目次‣ 自己紹介‣ AlfrescoとSolr‣ アーキテクチャ‣ インストール,設定‣ ソースコード解説‣ おわりに
    3. 3. 自己紹介‣ mryoshio → A社の社員 → AlfrescoやLiferayのコンサルタント → ソースコードを読んだりカスタマイズしたり → Twitterとか色々なところにいます → Solr/Lucene周りで遊びたいけど時間とれてない → GAE使って作りたいものあるけど(ry
    4. 4. AlfrescoとSolr
    5. 5. Alfrescoとは‣ 何? → 英Alfresco社が提供するオープンソースソフトウェア。企業規模のコンテンツ 管理を行える。それ以外に,Webコンテンツ管理やコラボレーションを低コ ストで行える‣ 似た機能をもつ製品は? → SharePoint(コラボレーション),Documentum(コンテンツ管理)あた りが該当する。DM,WCM,Shareにより異なる種類の製品に該当‣ 特徴は? → Community版 (無償)とEnterprise版(有償)が存在 → 多くのインターフェース(e.g. DM,Share,WCM)が存在
    6. 6. Solrとは‣ エンタープライズ検索プラットフォーム → Apache Luceneプロジェクトから派生した人気のある検索プラット フォーム。ヒット部分のハイライト,ファセットサーチなど豊富な機 能がある。スケーラブルで分散した検索やインデクスレプリケーショ ンも可能‣ スタンドアロンの全文検索サーバ → Tomcatなどサーブレットコンテナ上で動作する。Luceneを検索ラ イブラリとして使用し,インデクスを用いた全文検索を行う。REST ライクなHTTPベースのXMLやJSONインターフェースを持ち,プロ グラマブルにドキュメントの操作を行える http://lucene.apache.org/solr/
    7. 7. Alfresco Solr Plugin‣ 内包LuceneでなくでなくSolrで検索を行う‣ Alfrescoクラスタリングを行う場合, 検索インデクスのレプリケーションが不要‣ 基本的に外部のSolrインスタンスへ HTTPベースで問い合わせを行う
    8. 8. メリット,デメリット‣ メリット → 前頁を参照‣ デメリット → WCMを使えない → RMモジュールを使えない → マルチテナントを使えない → トランザクション内でのインデクシングなど 一貫性を重視する場合には使えない ※ http://wiki.alfresco.com/wiki/Alfresco_And_SOLR
    9. 9. (参考)スクリーンショット
    10. 10. アーキテクチャ
    11. 11. パターン1:AlfrescoとSolrが別居
    12. 12. パターン2:AlfrescoとSolrが同居
    13. 13. インストール,設定
    14. 14. Alfrescoのインストール‣ 過去の勉強会資料を参照 → http://www.slideshare.net/mryoshio/alfresco-install‣ alfresco-community-4.0.e.zipをダウンロード → https://wiki.alfresco.com/wiki/Community_file_list_4.0.e
    15. 15. SolrおよびSolr Pluginのインストール‣ 過去の勉強会資料を参照 → http://www.slideshare.net/TasukuOtani/ alfrescostudy4alfresco4solrintegration → この資料では同じTomcatにAlfresco,Solrを載せている‣ alfresco-community-solr-4.0.e.zipをダウン ロード → https://wiki.alfresco.com/wiki/Community_file_list_4.0.e
    16. 16. 動作確認‣ Alfresco Tomcatのlog4j.propertiesへ追記 → log4j.logger.org.alfresco.repo.search.impl.solr.SolrQueryHTTPC lient=debug‣ Alfrescoを起動 → ログイン後,検索を実行 => システムエラーの発生を確認2012-10-24 15:39:48,522 ERROR [ui.common.Utils] [http-8080-4] システムエラーが発生したため、検索できませんでした: 09240004 org.alfresco.repo.search.impl.lucene.LuceneQueryParserException: 09240004 at org.alfresco.repo.search.impl.solr.SolrQueryHTTPClient.executeQuery(SolrQueryHTTPClient.java:364) at org.alfresco.repo.search.impl.solr.SolrQueryLanguage.executeQuery(SolrQueryLanguage.java:49) at org.alfresco.repo.search.impl.solr.SolrSearchService.query(SolrSearchService.java:348) at org.alfresco.repo.search.SearcherComponent.query(SearcherComponent.java:78)(中略) at java.lang.Thread.run(Thread.java:680)Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)(後略)
    17. 17. 動作確認‣ Solrを起動 → 再度Alfrescoにて検索を実行 => catalina.outへログが出力される2012-10-24 15:45:54,157 DEBUG [impl.solr.SolrQueryHTTPClient] [http-8080-3] Sent :/solr/alfresco/alfresco?q=%28%28+TYPE%3A%22%7Bhttp%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%7Dcontent%22++AND+%28%40%5C%7Bhttp%5C%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%5C%7Dname%3A%22simple%22++TEXT%3A%22simple%22%29%29+%28+TYPE%3A%22%7Bhttp%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%7Dfolder%22++AND+%28%40%5C%7Bhttp%5C%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%5C%7Dname%3A%22simple%22+%29%29%29+AND+NOT+ASPECT%3A%22sys%3Ahidden%22+&wt=json&fl=*%2Cscore&rows=500&df=TEXT&start=0&locale=ja_JP&fq=%7B%21afts%7DAUTHORITY_FILTER_FROM_JSON&fq=%7B%21afts%7DTENANT_FILTER_FROM_JSON 2012-10-24 15:45:54,157 DEBUG [impl.solr.SolrQueryHTTPClient] [http-8080-3] with: {"textAttributes":[],"allAttributes":[],"templates":[],"authorities":["GROUP_ALFRESCO_ADMINISTRATORS","GROUP_EMAIL_CONTRIBUTORS","GROUP_EVERYONE","GROUP_site_admins","GROUP_site_admins_SiteManager","GROUP_site_swsdp","GROUP_site_swsdp_SiteManager","ROLE_ADMINISTRATOR","ROLE_AUTHENTICATED","admin"],"tenants":[""],"query":"(( TYPE:"{http://www.alfresco.org/model/content/1.0}content" AND (@{http://www.alfresco.org/model/content/1.0}name:"simple" TEXT:"simple")) ( TYPE:"{http://www.alfresco.org/model/content/1.0}folder" AND (@{http://www.alfresco.org/model/content/1.0}name:"simple" ))) AND NOT ASPECT:"sys:hidden"","locales":["ja_JP"],"defaultNamespace":"http://www.alfresco.org/model/content/1.0","defaultFTSFieldOperator":"OR","defaultFTSOperator":"OR"} 2012-10-24 15:45:54,157 DEBUG [impl.solr.SolrQueryHTTPClient] [http-8080-3] Got: 6 in 904 ms
    18. 18. ソースコード解説
    19. 19. Alfresco Solr Plugin側‣ solr-tomcat-context.xml‣ solr.xml‣ AlfrescoCoreAdminHandler‣ CoreTracker‣ CoreWatcherJob‣ CoreTrackerJob
    20. 20. solr-tomcat-context.xml‣ Solrのコンテキストを設定するためのファイル‣ ${TOMCAT_HOME}/conf/Catalina/localhost/ solr.xmlとして配置‣ solr.homeを設定<?xml version="1.0" encoding="utf-8"?><Context docBase="@@ALFRESCO_SOLR_DIR@@/apache-solr-1.4.1.war" debug="0" crossContext="true"> <Environment name="solr/home" type="java.lang.String" value="@@ALFRESCO_SOLR_DIR@@" override="true"/></Context>
    21. 21. solr.xml‣ ${SOLR_HOME}/solr.xml‣ 前頁の ${TOMCAT_HOME}/conf/Catalina/ localhost/solr.xmlとは異なるもの‣ Solrのマルチコア機能を使い複数のコアを設定 → alfrescoコアのsolr.homeをworkspace-SpacesStoreディレクトリに, archiveコアのsolr.homeをarchive-SpacesStoreディレクトリに設定<?xml version="1.0" encoding="UTF-8" ?><solr persistent="true" sharedLib="lib" > <cores adminPath="/admin/cores" adminHandler="org.alfresco.solr.AlfrescoCoreAdminHandler"> <core name="alfresco" instanceDir="workspace-SpacesStore" /> <core name="archive" instanceDir="archive-SpacesStore" /> </cores></solr>
    22. 22. AlfrescoCoreAdminHandler‣ マルチコアのハンドリングを行う → CoreAdminHandlerを継承 → coreを指定したactionリクエストを処理 → handleCustomActionが実際のロジック → 重要なメソッド AlfrescoCoreAdminHandler ... CoreWatcherJobのスケジューリング http://localhost:8080/solr/admin/cores?core=alfresco&action=check 上記のアクセスを行った場合,下記の分岐に入る151 if (a.equalsIgnoreCase("CHECK"))152 {
    23. 23. CoreTracker‣ インデクスのトラッキングを行う → CloseHookを継承 → solrcore.propertiesから読み込んだcoreの情報を保持 (e.g. alfresco.host) → Jobのスケジューリング → Alfrescoへ接続するclientを保持 → 重要なメソッド L.267 CoreTracker L.425 getRepoClient L. 458 updateIndex
    24. 24. CoreWatcherJob‣ スケジューリングされるジョブ → org.quartz.Jobを継承 → AlfrescoCoreAdminHandlerでジョブとして生成される → AlfrescoCoreAdminHandlerとCoreTrackerの仲立ちを行う → 重要なメソッド L.44 execute
    25. 25. CoreTrackerJob‣ インデクスのトラッキングを行うジョブ → org.quartz.Jobを継承 → CoreTrackerのupdateIndexメソッドを実行するジョブとなる → 重要なメソッド L.42 execute ... CoreTracker#updateIndexをcall
    26. 26. Alfresco側‣ SolrSearchService‣ SolrQueryHTTPClient‣ Alfresco Solr Pluginへ情報を渡すWebScript
    27. 27. SolrSearchService‣ Solrを使う場合のSearchService → org.alfresco.service.cmr.search.SearchServiceを継承 → 重要なメソッド L.137 query ... SearchParameterを設定 L.318 query ... 検索メソッド本体。最終的に SolrQueryHTTPClient#executeQueryを実行
    28. 28. SolrQueryHTTPClient‣ Solrへのリクエストの組立,実行を行う → 重要なメソッド L.133 executeQuery ... 検索URL組立,リクエスト送信,結果の返却を実行
    29. 29. 情報を渡すWebScript‣ Alfresco Solr PluginへAlfrescoの情報を渡す → webapps/alfresco/WEB-INF/classes/alfresco/templates/ webscripts/org/alfresco/repository/solr/に存在するWebScript群 aclChangeSets,acls,aclsReaders model,modelsdiff nodeContent,nodes,nodesMetaData、 transactions
    30. 30. おわりに
    31. 31. 参考‣ http://aegif-labo.blogspot.jp/2012/08/ solrssl.html‣ http://wiki.alfresco.com/wiki/ Alfresco_And_SOLR‣ http://docs.alfresco.com/4.0/index.jsp?topic= %2Fcom.alfresco.enterprise.doc%2Fconcepts %2Fsolr-webapp-config.html
    32. 32. Copyright 2012 tachibanakikaku.com. All rights reserved.
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×