Tomcat7.0にSolr3.5をセットアップする

気付けば環境設定ばかりしている毎日なのですが、今日はTomcat7.0にSolr3.5をセットアップします。   ■ Solrのダウロード&Tomcatにデプロイ   Solrのホームページからダウンロードしてきます。Ultra Fastて…って思うけどもw   zipファイルを落としてきて解凍後、solr.warをTomcatのwebappsディレクトリに突っ込みます C:UsersoreoreDownloadsapache-solr-3.5.0apache-solr-3.5.0examplewebappssolr.war から C:Program FilesApache Software FoundationTomcat 7.0webapps に。 Tomcatを起動するとwarファイルが解凍されます。   admin画面を開こうとすると404になってしまいます。まぁ、そんなものです。     ■ エラーログを確認しつつSolrがTomcat上で動くようにする   ログ見るとsolrのコンフィグがクラスパス上に見つかりませんわって事みたいです。

3 02, 2012 1:53:57 午後 org.apache.solr.common.SolrException log
重大: java.lang.RuntimeException: Can't find resource 'solrconfig.xml' in classpath or 'solr.conf/', cwd=C:Program FilesApache Software FoundationTomcat 7.0
    at org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:268)
    at org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:234)
    at org.apache.solr.core.Config.(Config.java:141)
    at org.apache.solr.core.SolrConfig.(SolrConfig.java:131)

  って事で、Solr周りではとてもお世話になった↓の書籍のAppendixに載ってる"TomcatでSolrを使う"を参照してみます。

Apache Solr入門 ―オープンソース全文検索エンジン
関口 宏司 三部 靖夫 武田 光平 中野 猛 大谷 純
技術評論社
売り上げランキング: 66494

  ・その1. server.xmlのConnector定義にuseBodyEncodingForURI="true"を設定する →サクっと出来ました。   ・その2. solrのWEB-INFにclasses/filterというディレクトリを作ってTomcatのexamplesからSetCharacterEncodingFilter.classをコピーする →examplesにSetCharacterEncodingFilterが無くなってる…   TomcatChangelogを見ると↓web.xmlでデフォルトになったって書いてあります。

Add example of configuration for SetCharacterEncodingFilter to the default web.xml file. (kkolinko)

web.xmlを見ると↓のようにorg.apache.catalina.filters.SetCharacterEncodingFilterってなってます。

    <!-- Example filter to set character encoding on each request -->
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>EUC_JP</param-value>

って事で、コレはSolrのweb.xmlに↓のようにUTF-8で定義を追加します。

  <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  ・その3. apache-solr-3.5.0examplesolrをパクってきてTOMCAT_HOMEの直下に置いて、 solr.solr.homeプロパティに設定してやります。   tomcat7.exeという実行ファイルでTomcatを起動していて、それにJavaVMの引数とか設定できなさそうだったので、 confcatalina.propertiesに以下を設定してやります。

#Solr configuration
solr.solr.home=C:/Program Files/Apache Software Foundation/Tomcat 7.0/solr

    ■ 起動します…   もう、なんなのよ…   スタックトレースみると↓って言ってます。VelocityResponseWriterってなんだろう。。

Error loading class 'solr.VelocityResponseWriter'

ググったら同じように困ってる人を見かけました↓ http://lucene.472066.n3.nabble.com/solr-VelocityResponseWriter-error-in-version-3-5-0-td3570020.html その定義消すか、libディレクトリにコピってjarを入れなさい、と。   そもそもVelocityResponsWriterって何か?って言うと、 Velocityっていうテンプレートエンジンなフレームワークじゃないですか、と。 #その昔いきなり頓挫になったプロジェクトで使ってたな~。N澤君とか元気してっかなー。 #こいつをレスポンスで受け取ったら、今後自分たちの管理画面とかで楽出来るカモなんて思ったりもして。 #xmlとかjsonをパースしてどうのとか、なんだかんだで面倒くさいしねぇ。   solrのREADME.txtを読んでたら↓って書いてあったのでlibディレクトリを作ってそこにコピります。

Example "Solr Home" Directory
=============================
~略~
   lib/
        This directory is optional.  If it exists, Solr will load any Jars
        found in this directory and use them to resolve any "plugins"
        specified in your solrconfig.xml or schema.xml (ie: Analyzers,
        Request Handlers, etc...).  Alternatively you can use the 
        syntax in solrconfig.xml to direct Solr to your plugins.  See the
        example solrconfig.xml file for details.

↓こんな感じで。   起動したら、、、jarファイルのロードはしてるっぽいけど、、、

情報: Adding 'file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/solr/lib/velocity-1.6.4.jar' to classloader
3 02, 2012 4:07:01 午後 org.apache.solr.core.SolrResourceLoader replaceClassLoader
情報: Adding 'file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/solr/lib/velocity-LICENSE-ASL.txt' to classloader
3 02, 2012 4:07:01 午後 org.apache.solr.core.SolrResourceLoader replaceClassLoader
情報: Adding 'file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/solr/lib/velocity-NOTICE.txt' to classloader
3 02, 2012 4:07:01 午後 org.apache.solr.core.SolrResourceLoader replaceClassLoader
情報: Adding 'file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/solr/lib/velocity-tools-2.0.jar' to classloader
3 02, 2012 4:07:01 午後 org.apache.solr.core.SolrResourceLoader replaceClassLoader
情報: Adding 'file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/solr/lib/velocity-tools-LICENSE-ASL.txt' to classloader
3 02, 2012 4:07:01 午後 org.apache.solr.core.SolrResourceLoader replaceClassLoader
情報: Adding 'file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/solr/lib/velocity-tools-NOTICE.txt' to classloader

  で、起動したら、また同じエラーで落ちてやがる…。   ↓見ると、安直にvelocityなんちゃらjarファイル入れればイイって分けじゃないみたいw http://wiki.apache.org/solr/VelocityResponseWriter   って事で、 ダウンロードしてきたSolrのdistディレクトリにあった apache-solr-velocity-3.5.0.jar と、 ダウンロードしてきたSolrのcontirbディレクトリにあった commons-beanutils-1.7.0.jar commons-collections-3.2.1.jar velocity-1.6.4.jar velocity-tools-2.0.jar をsolrのlibディレクトリに突っ込んでやります。   って事で、ようやく管理画面の起動に成功しました~!メデタシメデタシ。