rsolr-direct 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +15 -18
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/rsolr-direct.rb +34 -24
- data/spec/rsolr-direct_spec.rb +59 -5
- metadata +31 -2
data/README.rdoc
CHANGED
@@ -2,30 +2,27 @@
|
|
2
2
|
rsolr-direct enhances the RSolr core library by adding the ability to connect to Solr directly, using JRuby, sans http. Hotdog!
|
3
3
|
|
4
4
|
= How
|
5
|
-
Check out the specs to see the various connection methods.
|
5
|
+
Check out the specs to see the various connection methods.
|
6
6
|
|
7
|
-
==
|
7
|
+
== Solr Java libs/jars
|
8
|
+
RSolr-Direct comes with the required Solr jars. If you'd like to use them, just call #load_java_libs:
|
8
9
|
require 'rsolr-direct'
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
connection = RSolr.connect :solr_home => '/absolute/path/to/solr/home'
|
10
|
+
RSolr.load_java_libs
|
11
|
+
# create connection etc..
|
13
12
|
|
14
|
-
|
13
|
+
==:solr_home
|
15
14
|
require 'rsolr-direct'
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
connection = RSolr.connect :direct, :solr_home => '/absolute/path/to/solr/home'
|
16
|
+
|
17
|
+
==Java::OrgApacheSolrCore::SolrCore
|
18
|
+
require 'rsolr-direct'
|
19
|
+
core = org.apache.solr.core.SolrCore.new(nil, solr_data_path, solr_config, index_schema, dcore)
|
20
|
+
connection = RSolr.connect :direct, core
|
21
21
|
|
22
|
-
==
|
22
|
+
==Java::OrgApacheSolrServlet::DirectSolrConnection
|
23
23
|
require 'rsolr-direct'
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
dc = org.apache.solr.servlet.DirectSolrConnection.new(solr_home_path, solr_data_path, nil)
|
28
|
-
connection = RSolr.connect dc
|
24
|
+
dc = org.apache.solr.servlet.DirectSolrConnection.new(solr_home_path, solr_data_path, solr_log_path)
|
25
|
+
connection = RSolr.connect :direct, dc
|
29
26
|
|
30
27
|
= Why
|
31
28
|
Using a direct connection to Solr can speed up indexing. How much faster? I have no idea yet. Numbers to come?
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ begin
|
|
13
13
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
14
|
gem.add_dependency "rsolr", ">= 0.12.1"
|
15
15
|
|
16
|
-
gem.files = FileList['lib/**/*.rb', 'LICENSE', 'README.rdoc', 'VERSION']
|
16
|
+
gem.files = FileList['lib/**/*.rb', 'LICENSE', 'README.rdoc', 'VERSION', 'solr/dist/*', 'solr/lib/*']
|
17
17
|
gem.test_files = ['spec/*', 'Rakefile', 'solr/dist/*', 'solr/lib/*', 'solr/example/solr/*']
|
18
18
|
|
19
19
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.1.0
|
data/lib/rsolr-direct.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'java'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'rsolr'
|
4
4
|
|
@@ -9,13 +9,27 @@ module RSolr::Direct
|
|
9
9
|
|
10
10
|
module Connectable
|
11
11
|
|
12
|
+
# load the java libs that ship with rsolr-direct
|
13
|
+
# RSolr.load_java_libs
|
14
|
+
# rsolr = RSolr.connect :direct, :solr_home => ''
|
15
|
+
def load_java_libs
|
16
|
+
@java_libs_loaded ||= (
|
17
|
+
base_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'solr'))
|
18
|
+
['lib', 'dist'].each do |sub|
|
19
|
+
Dir[File.join(base_dir, sub, '*.jar')].each do |jar|
|
20
|
+
require jar
|
21
|
+
end
|
22
|
+
end
|
23
|
+
true
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
# RSolr.connect :direct, :solr_home => 'apache-solr/example/solr'
|
28
|
+
# RSolr.connect :direct, java_solr_core
|
29
|
+
# RSolr.connect :direct, java_direct_solr_connection
|
12
30
|
def connect *args, &blk
|
13
|
-
|
14
|
-
|
15
|
-
use_dc = use_dc || (first.class.to_s == "Java::OrgApacheSolrCore::SolrCore")
|
16
|
-
use_dc = use_dc || (first.class.to_s == "Java::OrgApacheSolrServlet::DirectSolrConnection")
|
17
|
-
if use_dc
|
18
|
-
client = RSolr::Client.new RSolr::Direct::Connection.new(first)
|
31
|
+
if args.first == :direct
|
32
|
+
client = RSolr::Client.new RSolr::Direct::Connection.new(*args[1..-1])
|
19
33
|
if block_given?
|
20
34
|
yield client
|
21
35
|
client.connection.close
|
@@ -50,7 +64,6 @@ module RSolr::Direct
|
|
50
64
|
# then...
|
51
65
|
# required: opts[:solr_home] is absolute path to solr home (the directory with "data", "config" etc.)
|
52
66
|
def initialize opts
|
53
|
-
opts ||= {}
|
54
67
|
|
55
68
|
begin
|
56
69
|
org.apache.solr.servlet.DirectSolrConnection
|
@@ -58,30 +71,27 @@ module RSolr::Direct
|
|
58
71
|
raise MissingRequiredJavaLibs
|
59
72
|
end
|
60
73
|
|
61
|
-
if
|
62
|
-
puts "OKOKOKOK a SolrCore!"
|
63
|
-
@connection = org.apache.solr.servlet.DirectSolrConnection.new(opts)
|
64
|
-
elsif defined?(Java::OrgApacheSolrServlet::DirectSolrConnection) and opts.is_a?(Java::OrgApacheSolrServlet::DirectSolrConnection)
|
65
|
-
@connection = opts
|
66
|
-
else
|
67
|
-
opts[:solr_home] ||= ''
|
74
|
+
if opts.is_a?(Hash) and opts[:solr_home]
|
68
75
|
raise InvalidSolrHome unless File.exists?(opts[:solr_home])
|
69
76
|
opts[:data_dir] ||= File.join(opts[:solr_home], 'data')
|
70
77
|
@opts = opts
|
78
|
+
elsif opts.class.to_s == "Java::OrgApacheSolrCore::SolrCore"
|
79
|
+
@direct = org.apache.solr.servlet.DirectSolrConnection.new(opts)
|
80
|
+
elsif opts.class.to_s == "Java::OrgApacheSolrServlet::DirectSolrConnection"
|
81
|
+
@direct = opts
|
71
82
|
end
|
72
83
|
end
|
73
84
|
|
74
|
-
# sets the @
|
75
|
-
def
|
76
|
-
@
|
77
|
-
org.apache.solr.servlet.DirectSolrConnection.new(opts[:home_dir], @opts[:data_dir], nil)
|
78
|
-
)
|
85
|
+
# sets the @direct instance variable if it has not yet been set
|
86
|
+
def direct
|
87
|
+
@direct ||= org.apache.solr.servlet.DirectSolrConnection.new(opts[:solr_home], @opts[:data_dir], nil)
|
79
88
|
end
|
80
89
|
|
81
90
|
def close
|
82
|
-
if @
|
83
|
-
@
|
84
|
-
@
|
91
|
+
if @direct
|
92
|
+
@direct.close
|
93
|
+
puts "CLOSING -> #{@direct}"
|
94
|
+
@direct = nil
|
85
95
|
end
|
86
96
|
end
|
87
97
|
|
@@ -92,7 +102,7 @@ module RSolr::Direct
|
|
92
102
|
data = data.to_xml if data.respond_to?(:to_xml)
|
93
103
|
url = build_url(path, params)
|
94
104
|
begin
|
95
|
-
body =
|
105
|
+
body = direct.request(url, data)
|
96
106
|
rescue
|
97
107
|
raise RSolr::RequestError.new($!.message)
|
98
108
|
end
|
data/spec/rsolr-direct_spec.rb
CHANGED
@@ -14,26 +14,26 @@ describe RSolr::Direct do
|
|
14
14
|
|
15
15
|
it 'should attempt to use a direct connect if :solr_home is set but raise a MissingRequiredJavaLibs' do
|
16
16
|
lambda{
|
17
|
-
RSolr.connect(:
|
17
|
+
RSolr.connect(:direct, nil)
|
18
18
|
}.should raise_error(RSolr::Direct::Connection::MissingRequiredJavaLibs)
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should attempt to use a direct connect if :solr_home is set but raise a InvalidSolrHome' do
|
22
22
|
load_required_java_libs
|
23
23
|
lambda{
|
24
|
-
RSolr.connect(:solr_home=>'')
|
24
|
+
RSolr.connect(:direct, :solr_home=>'')
|
25
25
|
}.should raise_error(RSolr::Direct::Connection::InvalidSolrHome)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should create direct connection succesfully' do
|
29
29
|
load_required_java_libs
|
30
|
-
RSolr.connect(:solr_home=>solr_home_dir).connection.should be_a(RSolr::Direct::Connection)
|
30
|
+
RSolr.connect(:direct, :solr_home=>solr_home_dir).connection.should be_a(RSolr::Direct::Connection)
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should accept a Java::OrgApacheSolrCore::SolrCore' do
|
34
34
|
load_required_java_libs
|
35
35
|
core = new_solr_core solr_home_dir, solr_data_dir
|
36
|
-
rsolr = RSolr.connect(core)
|
36
|
+
rsolr = RSolr.connect(:direct, core)
|
37
37
|
rsolr.should be_a(RSolr::Client)
|
38
38
|
rsolr.connection.should be_a(RSolr::Direct::Connection)
|
39
39
|
core.close
|
@@ -42,7 +42,7 @@ describe RSolr::Direct do
|
|
42
42
|
it 'should accept a Java::OrgApacheSolrServlet::DirectSolrConnection' do
|
43
43
|
load_required_java_libs
|
44
44
|
dc = new_direct_solr_connection solr_home_dir, solr_data_dir
|
45
|
-
rsolr = RSolr.connect(dc)
|
45
|
+
rsolr = RSolr.connect(:direct, dc)
|
46
46
|
rsolr.should be_a(RSolr::Client)
|
47
47
|
rsolr.connection.should be_a(RSolr::Direct::Connection)
|
48
48
|
dc.close
|
@@ -50,4 +50,58 @@ describe RSolr::Direct do
|
|
50
50
|
|
51
51
|
end
|
52
52
|
|
53
|
+
module ConnectionHelpers
|
54
|
+
|
55
|
+
def self.included base
|
56
|
+
base.let(:connections){
|
57
|
+
[
|
58
|
+
RSolr.connect(:direct, :solr_home=>solr_home_dir),
|
59
|
+
RSolr.connect(:direct, new_solr_core(solr_home_dir, solr_data_dir)),
|
60
|
+
RSolr.connect(:direct, new_direct_solr_connection(solr_home_dir, solr_data_dir))
|
61
|
+
]
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'connection closing' do
|
68
|
+
|
69
|
+
include ConnectionHelpers
|
70
|
+
|
71
|
+
it '(they) should have connection objects that respond to close, and set the internal "direct" attribute to nil' do
|
72
|
+
connections.each do |rsolr|
|
73
|
+
rsolr.connection.direct # <- connect
|
74
|
+
rsolr.connection.instance_variable_get("@direct").should_not be(nil)
|
75
|
+
rsolr.connection.close
|
76
|
+
rsolr.connection.instance_variable_get("@direct").should be(nil)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should automatically close when using the block style of connecting' do
|
81
|
+
rsolr = nil
|
82
|
+
RSolr.connect(:direct, :solr_home => solr_home_dir) do |client|
|
83
|
+
rsolr = client
|
84
|
+
client.connection.direct # <- connect
|
85
|
+
rsolr.connection.instance_variable_get("@direct").should_not be(nil)
|
86
|
+
end
|
87
|
+
rsolr.connection.instance_variable_get("@direct").should be(nil)
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'querying' do
|
93
|
+
|
94
|
+
include ConnectionHelpers
|
95
|
+
|
96
|
+
it '(they) should return a solr response hash when calling select' do
|
97
|
+
connections.each do |rsolr|
|
98
|
+
response = rsolr.select(:q => '*:*')
|
99
|
+
response.should be_a(Hash)
|
100
|
+
response.keys.should include("response", "responseHeader")
|
101
|
+
rsolr.connection.close
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
53
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsolr-direct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Mitchell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-05 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -46,6 +46,35 @@ files:
|
|
46
46
|
- README.rdoc
|
47
47
|
- VERSION
|
48
48
|
- lib/rsolr-direct.rb
|
49
|
+
- solr/dist/apache-solr-1.4.0.war
|
50
|
+
- solr/dist/apache-solr-cell-1.4.0.jar
|
51
|
+
- solr/dist/apache-solr-clustering-1.4.0.jar
|
52
|
+
- solr/dist/apache-solr-core-1.4.0.jar
|
53
|
+
- solr/dist/apache-solr-dataimporthandler-1.4.0.jar
|
54
|
+
- solr/dist/apache-solr-dataimporthandler-extras-1.4.0.jar
|
55
|
+
- solr/dist/apache-solr-solrj-1.4.0.jar
|
56
|
+
- solr/lib/commons-codec-1.3.jar
|
57
|
+
- solr/lib/commons-csv-1.0-SNAPSHOT-r609327.jar
|
58
|
+
- solr/lib/commons-fileupload-1.2.1.jar
|
59
|
+
- solr/lib/commons-httpclient-3.1.jar
|
60
|
+
- solr/lib/commons-io-1.4.jar
|
61
|
+
- solr/lib/easymock.jar
|
62
|
+
- solr/lib/geronimo-stax-api_1.0_spec-1.0.1.jar
|
63
|
+
- solr/lib/jcl-over-slf4j-1.5.5.jar
|
64
|
+
- solr/lib/junit-4.3.jar
|
65
|
+
- solr/lib/lucene-analyzers-2.9.1.jar
|
66
|
+
- solr/lib/lucene-core-2.9.1.jar
|
67
|
+
- solr/lib/lucene-highlighter-2.9.1.jar
|
68
|
+
- solr/lib/lucene-memory-2.9.1.jar
|
69
|
+
- solr/lib/lucene-misc-2.9.1.jar
|
70
|
+
- solr/lib/lucene-queries-2.9.1.jar
|
71
|
+
- solr/lib/lucene-snowball-2.9.1.jar
|
72
|
+
- solr/lib/lucene-spellchecker-2.9.1.jar
|
73
|
+
- solr/lib/servlet-api-2.4.jar
|
74
|
+
- solr/lib/slf4j-api-1.5.5.jar
|
75
|
+
- solr/lib/slf4j-jdk14-1.5.5.jar
|
76
|
+
- solr/lib/solr-commons-csv-pom.xml.template
|
77
|
+
- solr/lib/wstx-asl-3.2.7.jar
|
49
78
|
has_rdoc: true
|
50
79
|
homepage: http://github.com/mwmitchell/rsolr-direct
|
51
80
|
licenses: []
|