solr4r 0.0.5 → 0.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9aabdc8bcfbbe6f6e020f57575dde3039db78d3e
4
- data.tar.gz: 9e953a10513ce911d43892e38b993ec019d7c797
3
+ metadata.gz: ad8418aa9f1a84f5ff0c9196c7f1a805b8b4e84d
4
+ data.tar.gz: 4b557a50a64366aa9501f436dc0c2f1d66a5412e
5
5
  SHA512:
6
- metadata.gz: a0520d856c12f475f91fe67b9bdea73429f02671612fefcabf8bdac584f5ffa30cf58e454a75e646b6ec52aa55b29d3ac9f24f87421e87bebf5c78188cd1514a
7
- data.tar.gz: e85a0383e19a5a74af7c11d888cef0d49a01fd35783fafd3f7d95b8347f12a900af3badc3ce179a96013fc38267838d5c2c0a609d96082968d91fc1c55466cad
6
+ metadata.gz: b1f608e0dac485d86383efca1f68b099d08e803d57b3371d61cdbfa7de93166207d745ff7068af226086f8ce8d35bbcc8eeb1ae946c31c32f7c0d22707029a3d
7
+ data.tar.gz: e75af57456ae37f54c70ebd448010b07b9055ea853dcd530521315267c958bad360e52db7bc55e9cee777099712849f3033bee15922a3a257650e4a1e47de187
data/ChangeLog CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
  = Revision history for solr4r
4
4
 
5
+ == 0.0.6 [2015-03-18]
6
+
7
+ * Extracted Solr4R::Endpoints from Solr4R::Client.
8
+ * Extracted Solr4R::Client::Admin, Solr4R::Client::Query and
9
+ Solr4R::Client::Update from Solr4R::Client.
10
+ * Added core to Solr4R::Client.default_uri and adjusted
11
+ Solr4R::Client::DEFAULT_SYSTEM_PATH.
12
+ * Added Solr4R::Client::Admin#cores.
13
+ * Added Solr4R::Client::Admin#fields.
14
+ * Added Solr4R::Client::Admin#analyze_document.
15
+ * Added Solr4R::Client::Admin#analyze_field.
16
+ * Added Solr4R::Client::Query#json_document.
17
+ * Added Solr4R::Client::Query#more_like_this_h (using the {request
18
+ handler}[https://cwiki.apache.org/confluence/display/solr/MoreLikeThis]).
19
+ * Added Solr4R::Client::Query#more_like_this_q (using the {query
20
+ parser}[https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-MoreLikeThisQueryParser]).
21
+ * Added support for {local
22
+ params}[https://cwiki.apache.org/confluence/display/solr/Local+Parameters+in+Queries]
23
+ to Solr4R::Client.query_string.
24
+ * Extended Solr4R::RequestUriExtension#query_pairs to skip +nil+ values.
25
+ * Extended Solr4R::RequestUriExtension#query_pairs to allow control over
26
+ nested key's value (via +:_+).
27
+ * Refactored Solr4R::Document#more_like_this to use
28
+ Solr4R::Client#more_like_this.
29
+ * Refactored Solr4R::Builder#delete to use Solr4R::Client.query_string for
30
+ query hashes.
31
+ * Refactored Solr4R::Request preparation; dropped
32
+ Solr4R::HTTPRequestExtension.
33
+ * Refactored Solr4R::Response initialization.
34
+
5
35
  == 0.0.5 [2015-02-11]
6
36
 
7
37
  * Fixed Solr4R::Result for unsupported types.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to solr4r version 0.0.5
5
+ This documentation refers to solr4r version 0.0.6
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -5,9 +5,9 @@
5
5
  # #
6
6
  # solr4r -- A Ruby client for Apache Solr #
7
7
  # #
8
- # Copyright (C) 2014 Jens Wille #
8
+ # Copyright (C) 2014-2015 Jens Wille #
9
9
  # #
10
- # Mir is free software: you can redistribute it and/or modify it under the #
10
+ # solr4r is free software: you can redistribute it and/or modify it under the #
11
11
  # terms of the GNU Affero General Public License as published by the Free #
12
12
  # Software Foundation, either version 3 of the License, or (at your option) #
13
13
  # any later version. #
@@ -39,15 +39,11 @@ module Solr4R
39
39
 
40
40
  end
41
41
 
42
- DEFAULT_OPTIONS = {
43
- encoding: 'UTF-8'
44
- }
42
+ DEFAULT_OPTIONS = { encoding: 'UTF-8' }
45
43
 
46
44
  def initialize(options = {})
47
- if block_given?
48
- raise ArgumentError,
49
- 'block argument not supported, use options hash instead'
50
- end
45
+ raise ArgumentError,
46
+ 'block argument not supported, use options hash instead' if block_given?
51
47
 
52
48
  super(
53
49
  @_solr_opt = DEFAULT_OPTIONS.merge(options),
@@ -99,7 +95,7 @@ module Solr4R
99
95
  # </add>
100
96
  #
101
97
  # # document attributes
102
- # add([[{ id: 42, text: 'blah' }, { boost: 10.0 }]])
98
+ # add([[{ id: 42, text: 'blah' }, boost: 10.0]])
103
99
  #
104
100
  # <?xml version="1.0" encoding="UTF-8"?>
105
101
  # <add>
@@ -121,7 +117,7 @@ module Solr4R
121
117
  # </add>
122
118
  #
123
119
  # # all attributes together
124
- # add([[{ id: 42, text: ['blah', boost: 2.0] }, { boost: 10.0 }]], commitWithin: 23)
120
+ # add([[{ id: 42, text: ['blah', boost: 2.0] }, boost: 10.0]], commitWithin: 23)
125
121
  #
126
122
  # <?xml version="1.0" encoding="UTF-8"?>
127
123
  # <add commitWithin="23">
@@ -141,6 +137,8 @@ module Solr4R
141
137
  } }
142
138
  end
143
139
 
140
+ alias_method :doc, :add
141
+
144
142
  # See Schema[http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22].
145
143
  #
146
144
  # Examples:
@@ -189,6 +187,8 @@ module Solr4R
189
187
 
190
188
  # See Schema[http://wiki.apache.org/solr/UpdateXmlMessages#A.22delete.22_documents_by_ID_and_by_Query].
191
189
  #
190
+ # See Client.query_string for handling of query hashes.
191
+ #
192
192
  # Examples:
193
193
  #
194
194
  # # single ID
@@ -230,8 +230,7 @@ module Solr4R
230
230
  #
231
231
  # <?xml version="1.0" encoding="UTF-8"?>
232
232
  # <delete>
233
- # <query>office:Bridgewater</query>
234
- # <query>skills:Perl</query>
233
+ # <query>office:Bridgewater skills:Perl</query>
235
234
  # </delete>
236
235
  #
237
236
  # # query hash with array
@@ -239,8 +238,15 @@ module Solr4R
239
238
  #
240
239
  # <?xml version="1.0" encoding="UTF-8"?>
241
240
  # <delete>
242
- # <query>office:Bridgewater</query>
243
- # <query>office:Osaka</query>
241
+ # <query>office:Bridgewater office:Osaka</query>
242
+ # </delete>
243
+ #
244
+ # # query hash with LocalParams
245
+ # delete(query: { office: 'Bridgewater', _: { type: :edismax } })
246
+ #
247
+ # <?xml version="1.0" encoding="UTF-8"?>
248
+ # <delete>
249
+ # <query>{!type=edismax}office:Bridgewater</query>
244
250
  # </delete>
245
251
  #
246
252
  # # both IDs and queries
@@ -250,15 +256,19 @@ module Solr4R
250
256
  # <delete>
251
257
  # <id>05991</id>
252
258
  # <id>06000</id>
253
- # <query>office:Bridgewater</query>
254
- # <query>office:Osaka</query>
259
+ # <query>office:Bridgewater office:Osaka</query>
255
260
  # </delete>
256
261
  def delete(hash)
257
262
  to_xml(:delete) { |delete_node| hash.each { |key, values|
258
- delete = lambda { |value| delete_node.method_missing(key, value) }
259
-
260
- _each(values) { |value| !value.is_a?(Hash) ? delete[value] :
261
- value.each { |k, v| Array(v).each { |w| delete["#{k}:#{w}"] } } }
263
+ case key.to_s
264
+ when 'id'
265
+ _each(values) { |id| delete_node.id_(id) }
266
+ when 'query'
267
+ _each(values) { |query|
268
+ delete_node.query_(Client.query_string(query, false)) }
269
+ else
270
+ raise ArgumentError, "`id' or `query' expected, got %p" % key
271
+ end
262
272
  } }
263
273
  end
264
274
 
@@ -0,0 +1,83 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # solr4r -- A Ruby client for Apache Solr #
7
+ # #
8
+ # Copyright (C) 2014-2015 Jens Wille #
9
+ # #
10
+ # solr4r is free software: you can redistribute it and/or modify it under the #
11
+ # terms of the GNU Affero General Public License as published by the Free #
12
+ # Software Foundation, either version 3 of the License, or (at your option) #
13
+ # any later version. #
14
+ # #
15
+ # solr4r is distributed in the hope that it will be useful, but WITHOUT ANY #
16
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
17
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
18
+ # more details. #
19
+ # #
20
+ # You should have received a copy of the GNU Affero General Public License #
21
+ # along with solr4r. If not, see <http://www.gnu.org/licenses/>. #
22
+ # #
23
+ ###############################################################################
24
+ #++
25
+
26
+ module Solr4R
27
+
28
+ class Client
29
+
30
+ DEFAULT_PING_PATH = 'admin/ping'
31
+ DEFAULT_CORES_PATH = '../admin/cores'
32
+ DEFAULT_FIELDS_PATH = 'schema/fields'
33
+ DEFAULT_SYSTEM_PATH = '../admin/info/system'
34
+ DEFAULT_ANALYZE_DOCUMENT_PATH = 'analysis/document'
35
+ DEFAULT_ANALYZE_FIELD_PATH = 'analysis/field'
36
+
37
+ module Admin
38
+
39
+ def solr_version(type = :spec,
40
+ params = {}, options = {}, path = DEFAULT_SYSTEM_PATH, &block)
41
+
42
+ json(path, params, options, &block) % "lucene/solr-#{type}-version"
43
+ end
44
+
45
+ def ping(
46
+ params = {}, options = {}, path = DEFAULT_PING_PATH, &block)
47
+
48
+ json(path, params, options, &block) % 'status'
49
+ end
50
+
51
+ def cores(
52
+ params = {}, options = {}, path = DEFAULT_CORES_PATH, &block)
53
+
54
+ json(path, params, options, &block) % 'status'
55
+ end
56
+
57
+ def fields(
58
+ params = {}, options = {}, path = DEFAULT_FIELDS_PATH, &block)
59
+
60
+ json(path, params, options, &block) % 'fields'
61
+ end
62
+
63
+ def analyze_document(doc,
64
+ params = {}, options = {}, path = DEFAULT_ANALYZE_DOCUMENT_PATH, &block)
65
+
66
+ doc = builder.doc(doc) unless doc.is_a?(String)
67
+ update(doc, amend_options_hash(
68
+ options, :params, wt: :json), path, &block).result % 'analysis'
69
+ end
70
+
71
+ def analyze_field(analysis,
72
+ params = {}, options = {}, path = DEFAULT_ANALYZE_FIELD_PATH, &block)
73
+
74
+ json(path, params.merge(analysis: analysis), options, &block) % 'analysis'
75
+ end
76
+
77
+ end
78
+
79
+ include Admin
80
+
81
+ end
82
+
83
+ end
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # solr4r -- A Ruby client for Apache Solr #
7
+ # #
8
+ # Copyright (C) 2014-2015 Jens Wille #
9
+ # #
10
+ # solr4r is free software: you can redistribute it and/or modify it under the #
11
+ # terms of the GNU Affero General Public License as published by the Free #
12
+ # Software Foundation, either version 3 of the License, or (at your option) #
13
+ # any later version. #
14
+ # #
15
+ # solr4r is distributed in the hope that it will be useful, but WITHOUT ANY #
16
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
17
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
18
+ # more details. #
19
+ # #
20
+ # You should have received a copy of the GNU Affero General Public License #
21
+ # along with solr4r. If not, see <http://www.gnu.org/licenses/>. #
22
+ # #
23
+ ###############################################################################
24
+ #++
25
+
26
+ module Solr4R
27
+
28
+ class Client
29
+
30
+ MATCH_ALL_QUERY = '*:*'
31
+
32
+ DEFAULT_SELECT_PATH = 'select'
33
+ DEFAULT_MLT_PATH = 'mlt'
34
+
35
+ MLT_DEFAULT_FL = '*,score'
36
+ MLT_DEFAULT_ROWS = 5
37
+ MLT_LOCAL_PARAMS = local_params_string(
38
+ %w[mintf mindf minwl maxwl], type: :mlt, qf: '$mlt.fl')
39
+
40
+ module Query
41
+
42
+ def count(
43
+ params = {}, options = {}, path = DEFAULT_SELECT_PATH, &block)
44
+
45
+ params = params.merge(rows: 0)
46
+ params[:q] ||= MATCH_ALL_QUERY
47
+ get(path, params, options, &block)
48
+ end
49
+
50
+ def json_query(
51
+ params = {}, options = {}, path = DEFAULT_SELECT_PATH, &block)
52
+
53
+ json(path, params.merge(Hash[[:q, :fq].map { |key|
54
+ [key, self.class.query_string(params[key])] }]), options, &block)
55
+ end
56
+
57
+ def json_document(id,
58
+ params = {}, options = {}, path = DEFAULT_SELECT_PATH, &block)
59
+
60
+ json_query(params.merge(q: { id: id }), options, path, &block).first
61
+ end
62
+
63
+ def more_like_this_h(id, fields,
64
+ params = {}, options = {}, path = DEFAULT_MLT_PATH, &block)
65
+
66
+ _more_like_this_query({ id: id }, fields, params, options, path, &block)
67
+ end
68
+
69
+ def more_like_this_q(id, fields,
70
+ params = {}, options = {}, path = DEFAULT_SELECT_PATH, &block)
71
+
72
+ _more_like_this_query(MLT_LOCAL_PARAMS + id, fields, amend_options_array(
73
+ params, :fq, '-id' => id, _: { cache: false }), options, path, &block)
74
+ end
75
+
76
+ alias_method :more_like_this, :more_like_this_q
77
+
78
+ private
79
+
80
+ def _more_like_this_query(query, fields, params, *args, &block)
81
+ json_query(params.merge('mlt.fl' => Array(fields).join(','),
82
+ q: query,
83
+ fl: params.fetch(:fl, MLT_DEFAULT_FL),
84
+ rows: params.fetch(:rows, MLT_DEFAULT_ROWS)), *args, &block)
85
+ end
86
+
87
+ end
88
+
89
+ include Query
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,123 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # solr4r -- A Ruby client for Apache Solr #
7
+ # #
8
+ # Copyright (C) 2014-2015 Jens Wille #
9
+ # #
10
+ # solr4r is free software: you can redistribute it and/or modify it under the #
11
+ # terms of the GNU Affero General Public License as published by the Free #
12
+ # Software Foundation, either version 3 of the License, or (at your option) #
13
+ # any later version. #
14
+ # #
15
+ # solr4r is distributed in the hope that it will be useful, but WITHOUT ANY #
16
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
17
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
18
+ # more details. #
19
+ # #
20
+ # You should have received a copy of the GNU Affero General Public License #
21
+ # along with solr4r. If not, see <http://www.gnu.org/licenses/>. #
22
+ # #
23
+ ###############################################################################
24
+ #++
25
+
26
+ module Solr4R
27
+
28
+ class Client
29
+
30
+ DEFAULT_BATCH_SIZE = 1000
31
+
32
+ DEFAULT_UPDATE_TYPE = 'text/xml'
33
+
34
+ DEFAULT_UPDATE_PATH = 'update'
35
+
36
+ module Update
37
+
38
+ def update(data,
39
+ params = {}, options = {},
40
+ path = DEFAULT_UPDATE_PATH,
41
+ type = DEFAULT_UPDATE_TYPE, &block)
42
+
43
+ post(path, data, params, amend_options_hash(
44
+ options, :headers, 'Content-Type' => type), &block)
45
+ end
46
+
47
+ # See Builder#add.
48
+ def add(doc, attributes = {},
49
+ params = {}, options = {}, &block)
50
+
51
+ update(builder.add(doc, attributes), params, options, &block)
52
+ end
53
+
54
+ def add_batch(docs, attributes = {},
55
+ params = {}, options = {}, batch_size = DEFAULT_BATCH_SIZE, &block)
56
+
57
+ failed = []
58
+
59
+ docs.each_slice(batch_size) { |batch|
60
+ add(batch, attributes, params, options, &block).success? ||
61
+ failed.concat(batch_size == 1 ? batch : add_batch(batch,
62
+ attributes, params, options, batch_size / 10, &block))
63
+ }
64
+
65
+ failed
66
+ end
67
+
68
+ # See Builder#commit.
69
+ def commit(attributes = {},
70
+ params = {}, options = {}, &block)
71
+
72
+ update(builder.commit(attributes), params, options, &block)
73
+ end
74
+
75
+ # See Builder#optimize.
76
+ def optimize(attributes = {},
77
+ params = {}, options = {}, &block)
78
+
79
+ update(builder.optimize(attributes), params, options, &block)
80
+ end
81
+
82
+ # See Builder#rollback.
83
+ def rollback(
84
+ params = {}, options = {}, &block)
85
+
86
+ update(builder.rollback, params, options, &block)
87
+ end
88
+
89
+ # See Builder#delete.
90
+ def delete(hash,
91
+ params = {}, options = {}, &block)
92
+
93
+ update(builder.delete(hash), params, options, &block)
94
+ end
95
+
96
+ # See #delete.
97
+ def delete_by_id(id,
98
+ params = {}, options = {}, &block)
99
+
100
+ delete({ id: id }, params, options, &block)
101
+ end
102
+
103
+ # See #delete.
104
+ def delete_by_query(query,
105
+ params = {}, options = {}, &block)
106
+
107
+ delete({ query: query }, params, options, &block)
108
+ end
109
+
110
+ # See #delete_by_query.
111
+ def delete_all!(
112
+ params = {}, options = {}, &block)
113
+
114
+ delete_by_query(MATCH_ALL_QUERY, params, options, &block)
115
+ end
116
+
117
+ end
118
+
119
+ include Update
120
+
121
+ end
122
+
123
+ end