SolrのRubyクライアントであるsolr-rubyを使ってみているのですが、肝心のsolr-ruby - Solr Wikiにはこんなサンプルしか載っていません。これだとドキュメント1つごとに一回のHTTP通信が発生するため、ドキュメントの量が多い場合にはあまり効率が良くありません。
require 'solr'# connect to the solr instanceconn = Solr::Connection.new('http://localhost:8983/solr', :autocommit => :on)# add a document to the indexconn.add(:id => 123, :name => 'Lucene in Action')
ひとまずソースコードに目を通してみると、Solr::Request::AddDocumentはコンストラクタに配列でSolr::Documentが渡せるようなので、こんな感じで書くといっぺんに投げられるようになりました。
require 'solr'docs = []docs.push Solr::Document.new(:id => 1, :name => 'foo')docs.push Solr::Document.new(:id => 2, :name => 'bar')docs.push Solr::Document.new(:id => 3, :name => 'baz')req = Solr::Request::AddDocument.new(docs)conn = Solr::Connection.new('http://localhost:8983/solr', :autocommit => :on)conn.send(req)
そもそもこんなことせずに大量にドキュメントを登録するときはおとなしくCSVかDIHを使えっていう話なのかもしれませんが。