solr-rubyをMacOSXにインストール

solr-rubyとは
rubyで書かれたsolrクライアントライブラリ。solrに対するHTTPリクエストとレスポンスを処理する。http://wiki.apache.org/solr/solr-ruby

インストール手順

1. apache-solr-1.2.0のインストール
以下のURLからapache-solr-1.2.0.zipをダウンロードして解凍する。
http://www.apache.org/dyn/closer.cgi/lucene/solr/

2. SVNクライアントを使って以下のURLからチェックアウト。

$ svn co http://svn.apache.org/repos/asf/lucene/solr/trunk/client/ruby/solr-ruby

3. solr-rubyで使用するライブラリをインストール

$ sudo port install libxml2
$ sudo port install rb-libxml2
$ sudo gem install libxml-ruby
$ sudo gem install hpricot

JRubyではネイティブメソッドを使用するlibxml-rubyをインストールできない。


4. スクリプトの修正

4.1 lib/solr/importer/xpath_mapper.rb
collectが追加されないので、field_dataを変更:

    def field_data(doc, xpath)
      nodes = doc.find(xpath.to_s)
      result = []
      nodes.each do |node|
        case node
          when XML::Attr
            result << node.value
          when XML::Node
            result << node.child.to_s
        end
      end
      nodes = nil
      result
    end

4.2 test/unit/changes_yaml_test.rb
以下のrequireを追加:

require 'yaml'

5. ユニットテスト

$ rake test_units

6. 結合テスト
apache-solrのexampleディレクトリに移動:

$ cd apache-solr-1.2.0/example

solrのポートを8888に変更:

$ vi etc/jetty.xml

    <Call name="addConnector">
      <Arg>
          <New class="org.mortbay.jetty.bio.SocketConnector">
            <Set name="port">8888</Set>
            <Set name="maxIdleTime">50000</Set>
            <Set name="lowResourceMaxIdleTime">1500</Set>
          </New>
      </Arg>
    </Call>

solr-1.2.0にはAdminHandlersがないので、
sorl-ruby/test/conf/solrconfig.xml
にある/admin/に対するrequestHandlerの指定を

  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />

以下に変更する。

  <requestHandler name="/admin/luke"
    class="org.apache.solr.handler.admin.LukeRequestHandler" />
  <requestHandler name="/admin/system"
    class="org.apache.solr.handler.admin.SystemInfoHandler" />
  <requestHandler name="/admin/plugins"
    class="org.apache.solr.handler.admin.PluginInfoHandler" />
  <requestHandler name="/admin/threads"
    class="org.apache.solr.handler.admin.ThreadDumpHandler" />
  <requestHandler name="/admin/properties"
    class="org.apache.solr.handler.admin.PropertiesRequestHandler" />

solr.solr.homeをtestディレクトリに指定してsolrを起動:

$ java -Dsolr.solr.home=/Users/xxxx/solr-ruby/test -jar start.jar

テスト実行:

$ rake test_functinals