lucene-ruby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matt Mitchell" <goodie...@gmail.com>
Subject quick jruby + solr benchmarks
Date Tue, 25 Nov 2008 23:04:38 GMT
I'm starting to experiment with benchmarks/jruby + solr and just wanted to
get this out there -- getting ready for a week vacation :)

In my solr-ruby 'refactoring' progress, I'm finding some interesting results
and will try to post in the next few weeks.

This is jruby 1.1.4 and solr 1.3 (empty index) -- using the standard Ruby
"Benchmark" library.

The script:

#

require 'java'
require 'benchmark'

solr_dist_root = File.expand_path(File.join(File.dirname(__FILE__), '..',
'apache-solr-1.3.0'))
solr_home = File.join(solr_dist_root, 'example', 'solr')

def require_jars(dir)
  jar_pattern = File.join(dir,"**", "*.jar")
  jar_files = Dir.glob(jar_pattern)
  jar_files.each {|jar_file| require jar_file}
end

def hash_to_params(hash_params)
  import org.apache.solr.common.params.ModifiableSolrParams
  query = ModifiableSolrParams.new
  query.instance_eval do
    alias _add add
    def add(field, values)
      _add(field.to_s, (values.is_a?(Array) ? values :
[values]).to_java(:string))
    end
  end
  hash_params.each_pair do |k,v|
    query.add k, v
  end
  query
end

require_jars(File.join(solr_dist_root, "lib"))
require_jars(File.join(solr_dist_root, "dist"))

# HttpCommons
def http_commons
  @http_commons ||= (
    import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer
    import org.apache.solr.common.params.MapSolrParams
    solr = CommonsHttpSolrServer.new("http://localhost:8983/solr")
  )
end

# EmbeddedSolrServer
def embedded(solr_home)
  @embedded ||= (
    import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer
    import org.apache.solr.core.CoreContainer
    import org.apache.solr.core.CoreDescriptor
    import org.apache.solr.client.solrj.SolrQuery
    core_name = 'main-core'
    container = CoreContainer.new
    descriptor = CoreDescriptor.new(container, core_name, solr_home)
    core = container.create(descriptor)
    container.register(core_name, core, false)
    solr = EmbeddedSolrServer.new(container, core_name)
  )
end

query = {'qt' => 'standard', 'q'=>'ipod', 'facet.field' => 'cat'}
params = hash_to_params(query)

max = 1000

Benchmark.bm do |x|
  x.report 'http commons' do
    max.times do
      http_commons.query(params)
    end
  end
  x.report 'embedded' do
    max.times do
      embedded(solr_home).query(params)
    end
  end
end

# THE RESULTS

# http commons
    # 4.634000   0.000000   4.634000 (  4.633849)
    # 4.454000   0.000000   4.454000 (  4.453764)
    # 3.908000   0.000000   3.908000 (  3.907367)

# embedded
    # 2.152000   0.000000   2.152000 (  2.152226)
    # 2.191000   0.000000   2.191000 (  2.191359)
    # 2.083000   0.000000   2.083000 (  2.082696)

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message