solr-ruby 0.0.4 → 0.0.5
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/lib/solr/connection.rb +1 -1
- data/lib/solr/importer/solr_source.rb +1 -1
- data/lib/solr/request.rb +1 -0
- data/lib/solr/request/add_document.rb +1 -1
- data/lib/solr/request/base.rb +1 -1
- data/lib/solr/request/modify_document.rb +51 -0
- data/lib/solr/request/standard.rb +14 -1
- data/lib/solr/response.rb +1 -0
- data/lib/solr/response/modify_document.rb +17 -0
- data/lib/solr/response/standard.rb +1 -0
- data/lib/solr/util.rb +4 -0
- data/test/unit/modify_document_test.rb +25 -0
- data/test/unit/standard_request_test.rb +27 -1
- data/test/unit/util_test.rb +3 -1
- metadata +5 -2
data/lib/solr/connection.rb
CHANGED
@@ -28,7 +28,7 @@ class Solr::Connection
|
|
28
28
|
# conn = Solr::Connection.new('http://example.com:8080/solr',
|
29
29
|
# :autocommit => :on)
|
30
30
|
|
31
|
-
def initialize(url, opts={})
|
31
|
+
def initialize(url="http://localhost:8983/solr", opts={})
|
32
32
|
@url = URI.parse(url)
|
33
33
|
unless @url.kind_of? URI::HTTP
|
34
34
|
raise "invalid http url: #{url}"
|
@@ -13,7 +13,7 @@
|
|
13
13
|
require 'solr'
|
14
14
|
|
15
15
|
class Solr::Importer::SolrSource
|
16
|
-
def initialize(solr_url, query, filter_queries, options={})
|
16
|
+
def initialize(solr_url, query, filter_queries=nil, options={})
|
17
17
|
@connection = Solr::Connection.new(solr_url)
|
18
18
|
@query = query
|
19
19
|
@filter_queries = filter_queries
|
data/lib/solr/request.rb
CHANGED
@@ -23,7 +23,7 @@ class Solr::Request::AddDocument < Solr::Request::Update
|
|
23
23
|
#
|
24
24
|
# as a short cut you can pass in a Hash instead:
|
25
25
|
#
|
26
|
-
# request = Solr::Request.new :creator => 'Jorge Luis Borges'
|
26
|
+
# request = Solr::Request::AddDocument.new :creator => 'Jorge Luis Borges'
|
27
27
|
#
|
28
28
|
# or an array, to add multiple documents at the same time:
|
29
29
|
#
|
data/lib/solr/request/base.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'solr/xml'
|
14
|
+
require 'solr/request/base'
|
15
|
+
require 'solr/document'
|
16
|
+
require 'solr/request/update'
|
17
|
+
|
18
|
+
class Solr::Request::ModifyDocument < Solr::Request::Update
|
19
|
+
|
20
|
+
# Example: ModifyDocument.new(:id => 10, :overwrite => {:field_name => "new value"})
|
21
|
+
def initialize(update_data)
|
22
|
+
modes = []
|
23
|
+
@doc = {}
|
24
|
+
[:overwrite, :append, :distinct, :increment, :delete].each do |mode|
|
25
|
+
field_data = update_data[mode]
|
26
|
+
if field_data
|
27
|
+
field_data.each do |field_name, field_value|
|
28
|
+
modes << "#{field_name}:#{mode.to_s.upcase}"
|
29
|
+
@doc[field_name] = field_value if field_value # if value is nil, omit so it can be removed
|
30
|
+
end
|
31
|
+
update_data.delete mode
|
32
|
+
end
|
33
|
+
end
|
34
|
+
@mode = modes.join(",")
|
35
|
+
|
36
|
+
# only one key should be left over, the id
|
37
|
+
@doc[update_data.keys[0].to_s] = update_data.values[0]
|
38
|
+
end
|
39
|
+
|
40
|
+
# returns the request as a string suitable for posting
|
41
|
+
def to_s
|
42
|
+
e = Solr::XML::Element.new 'add'
|
43
|
+
e.add_element(Solr::Document.new(@doc).to_xml)
|
44
|
+
return e.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def handler
|
48
|
+
"update?mode=#{@mode}"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -13,7 +13,7 @@
|
|
13
13
|
class Solr::Request::Standard < Solr::Request::Select
|
14
14
|
|
15
15
|
VALID_PARAMS = [:query, :sort, :default_field, :operator, :start, :rows,
|
16
|
-
:filter_queries, :field_list, :debug_query, :explain_other, :facets, :highlighting]
|
16
|
+
:filter_queries, :field_list, :debug_query, :explain_other, :facets, :highlighting, :mlt]
|
17
17
|
|
18
18
|
def initialize(params)
|
19
19
|
super('standard')
|
@@ -98,8 +98,21 @@ class Solr::Request::Standard < Solr::Request::Select
|
|
98
98
|
hash["hl.requireFieldMatch"] = @params[:highlighting][:require_field_match]
|
99
99
|
hash["hl.simple.pre"] = @params[:highlighting][:prefix]
|
100
100
|
hash["hl.simple.post"] = @params[:highlighting][:suffix]
|
101
|
+
hash["hl.fragsize"] = @params[:highlighting][:fragment_size]
|
101
102
|
end
|
102
103
|
|
104
|
+
if @params[:mlt]
|
105
|
+
hash[:mlt] = true
|
106
|
+
hash["mlt.count"] = @params[:mlt][:count]
|
107
|
+
hash["mlt.fl"] = @params[:mlt][:field_list].join(',')
|
108
|
+
hash["mlt.mintf"] = @params[:mlt][:min_term_freq]
|
109
|
+
hash["mlt.mindf"] = @params[:mlt][:min_doc_freq]
|
110
|
+
hash["mlt.minwl"] = @params[:mlt][:min_word_length]
|
111
|
+
hash["mlt.maxwl"] = @params[:mlt][:max_word_length]
|
112
|
+
hash["mlt.maxqt"] = @params[:mlt][:max_query_terms]
|
113
|
+
hash["mlt.maxntp"] = @params[:mlt][:max_tokens_parsed]
|
114
|
+
hash["mlt.boost"] = @params[:mlt][:boost]
|
115
|
+
end
|
103
116
|
|
104
117
|
hash.merge(super.to_hash)
|
105
118
|
end
|
data/lib/solr/response.rb
CHANGED
@@ -16,6 +16,7 @@ require 'solr/response/xml'
|
|
16
16
|
require 'solr/response/ruby'
|
17
17
|
require 'solr/response/ping'
|
18
18
|
require 'solr/response/add_document'
|
19
|
+
require 'solr/response/modify_document'
|
19
20
|
require 'solr/response/standard'
|
20
21
|
require 'solr/response/dismax'
|
21
22
|
require 'solr/response/commit'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
class Solr::Response::ModifyDocument < Solr::Response::Xml
|
14
|
+
def initialize(xml)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
data/lib/solr/util.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# The ASF licenses this file to You under the Apache License, Version 2.0
|
2
|
+
# (the "License"); you may not use this file except in compliance with
|
3
|
+
# the License. You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'solr'
|
15
|
+
|
16
|
+
class ModifyDocumentTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
def test_update_formatting
|
19
|
+
request = Solr::Request::ModifyDocument.new(:id => 10, :overwrite => {:name => ['val1', 'val2'], :copyfield => nil})
|
20
|
+
assert_equal :xml, request.response_format
|
21
|
+
assert_equal 'update?mode=copyfield:OVERWRITE,name:OVERWRITE', request.handler
|
22
|
+
|
23
|
+
assert_match(/<add>[\s]*<doc>[\s]*<field name=["']id['"]>10<\/field>[\s]*<field name=['"]name['"]>val1<\/field>[\s]*<field name=['"]name['"]>val2<\/field>[\s]*<\/doc>[\s]*<\/add>/, request.to_s)
|
24
|
+
end
|
25
|
+
end
|
@@ -104,7 +104,8 @@ class StandardRequestTest < Test::Unit::TestCase
|
|
104
104
|
:max_snippets => 3,
|
105
105
|
:require_field_match => true,
|
106
106
|
:prefix => "<blink>",
|
107
|
-
:suffix => "</blink>"
|
107
|
+
:suffix => "</blink>",
|
108
|
+
:fragment_size => 300
|
108
109
|
}
|
109
110
|
)
|
110
111
|
|
@@ -114,6 +115,31 @@ class StandardRequestTest < Test::Unit::TestCase
|
|
114
115
|
assert_equal true, hash["hl.requireFieldMatch"]
|
115
116
|
assert_equal "<blink>", hash["hl.simple.pre"]
|
116
117
|
assert_equal "</blink>", hash["hl.simple.post"]
|
118
|
+
assert_equal 300, hash["hl.fragsize"]
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_mlt
|
122
|
+
request = Solr::Request::Standard.new(:query => 'query',
|
123
|
+
:mlt => {
|
124
|
+
:count => 5, :field_list => ['field1', 'field2'],
|
125
|
+
:min_term_freq => 3, :min_doc_freq => 10,
|
126
|
+
:min_word_length => 4, :max_word_length => 17,
|
127
|
+
:max_query_terms => 20, :max_tokens_parsed => 100,
|
128
|
+
:boost => true
|
129
|
+
}
|
130
|
+
)
|
131
|
+
|
132
|
+
hash = request.to_hash
|
133
|
+
assert_equal true, hash[:mlt]
|
134
|
+
assert_equal 5, hash["mlt.count"]
|
135
|
+
assert_equal 'field1,field2', hash["mlt.fl"]
|
136
|
+
assert_equal 3, hash["mlt.mintf"]
|
137
|
+
assert_equal 10, hash["mlt.mindf"]
|
138
|
+
assert_equal 4, hash["mlt.minwl"]
|
139
|
+
assert_equal 17, hash["mlt.maxwl"]
|
140
|
+
assert_equal 20, hash["mlt.maxqt"]
|
141
|
+
assert_equal 100, hash["mlt.maxntp"]
|
142
|
+
assert_equal true, hash["mlt.boost"]
|
117
143
|
end
|
118
144
|
|
119
145
|
end
|
data/test/unit/util_test.rb
CHANGED
@@ -14,9 +14,11 @@ require 'solr'
|
|
14
14
|
require 'test/unit'
|
15
15
|
|
16
16
|
class UtilTest < Test::Unit::TestCase
|
17
|
-
|
18
17
|
def test_paired_array_to_hash
|
19
18
|
assert_equal({:key1 => :value1, :key2 => :value2}, Solr::Util.paired_array_to_hash([:key1, :value1, :key2, :value2]))
|
20
19
|
end
|
21
20
|
|
21
|
+
def test_query_parser_escape
|
22
|
+
assert_equal %q(http\:\/\/lucene\.apache\.org\/solr), Solr::Util.query_parser_escape("http://lucene.apache.org/solr")
|
23
|
+
end
|
22
24
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: solr-ruby
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-08-
|
6
|
+
version: 0.0.5
|
7
|
+
date: 2007-08-27 00:00:00 -04:00
|
8
8
|
summary: Ruby library for working with Apache Solr
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/solr/request/delete.rb
|
58
58
|
- lib/solr/request/dismax.rb
|
59
59
|
- lib/solr/request/index_info.rb
|
60
|
+
- lib/solr/request/modify_document.rb
|
60
61
|
- lib/solr/request/optimize.rb
|
61
62
|
- lib/solr/request/ping.rb
|
62
63
|
- lib/solr/request/select.rb
|
@@ -68,6 +69,7 @@ files:
|
|
68
69
|
- lib/solr/response/delete.rb
|
69
70
|
- lib/solr/response/dismax.rb
|
70
71
|
- lib/solr/response/index_info.rb
|
72
|
+
- lib/solr/response/modify_document.rb
|
71
73
|
- lib/solr/response/optimize.rb
|
72
74
|
- lib/solr/response/ping.rb
|
73
75
|
- lib/solr/response/ruby.rb
|
@@ -86,6 +88,7 @@ files:
|
|
86
88
|
- test/unit/hpricot_mapper_test.rb
|
87
89
|
- test/unit/hpricot_test_file.xml
|
88
90
|
- test/unit/indexer_test.rb
|
91
|
+
- test/unit/modify_document_test.rb
|
89
92
|
- test/unit/ping_test.rb
|
90
93
|
- test/unit/request_test.rb
|
91
94
|
- test/unit/response_test.rb
|