solrb 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a466479c836a5cc67ee81a755af60a635419bd7323adfd7ffe684762907abfe0
4
- data.tar.gz: 2914f312a755836fd60c4b363f077a6a5ea9861b80f9acdc1208606d81890152
3
+ metadata.gz: afb9302df9f0a348f4d80a007a7e3da0df0fed4ff012e814788c6b610fdfb642
4
+ data.tar.gz: 4001463e4a3c13b487180336e9cb0d949de06beb377b24caf7b8f7d579cffc84
5
5
  SHA512:
6
- metadata.gz: 561939f9974533d48c2ffd9c6cb6a07945d5d91b3dfd88e06aa1f79d92a5d8981c2efa54ade457a24885956f2c0a372ad51d7ee703a42319b497b7b59400e884
7
- data.tar.gz: b24e4229b0ba854c91cb277413967a96fe33d19bf17cc2f5e5bcfa0e05aa26e29b8b5155d6a26f771eba8521891a925c3b38024d162f165ad39b95d921895fe1
6
+ metadata.gz: 54f453cedf22c49924b2e959356029e3079d28498213ec4ef890da46caee815552554ba9dbc5ec48c476ff1089090fac0699c1f801d58e3095ac6f8810327d39
7
+ data.tar.gz: 76b252a3b999c546fab15c0f7e421179ea081c0d0a31b3a4f64950f29fce12f0d36d3762b05ac8a2bfb99b7911eb5294010a0947ac3975d2b0b6838be5792d56
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- solrb (0.1.4)
4
+ solrb (0.1.3)
5
5
  addressable
6
6
  faraday
7
7
 
data/README.md CHANGED
@@ -1,19 +1,41 @@
1
1
  [![CircleCI](https://circleci.com/gh/machinio/solrb/tree/master.svg?style=svg)](https://circleci.com/gh/machinio/solrb/tree/master)
2
2
  [![Maintainability](https://api.codeclimate.com/v1/badges/81e84c1c42f10f9da801/maintainability)](https://codeclimate.com/github/machinio/solrb/maintainability)
3
3
 
4
- # Solrb
4
+ Solrb
5
+ ======
5
6
 
6
7
  Object-Oriented approach to Solr in Ruby.
7
8
 
8
- ## Installation
9
+ Installation: `gem install solrb`
9
10
 
10
- Add this line to your application's Gemfile:
11
+ ## Table of contents
11
12
 
12
- ```ruby
13
- gem 'solrb', require: 'solr'
14
- ```
15
13
 
16
- ## Configuration
14
+ * [Configuration](#configuration)
15
+ * [Setting Solr URL via environment variable](#setting-solr-url-via-environment-variable)
16
+ * [Single core configuration](#single-core-configuration)
17
+ * [Multiple core configuration](#multiple-core-configuration)
18
+ * [Indexing](#indexing)
19
+ * [Querying](#querying)
20
+ * [Simple Query](#simple-query)
21
+ * [Querying multiple cores](#querying-multiple-cores)
22
+ * [Query with field boost](#query-with-field-boost)
23
+ * [Query with filtering](#query-with-filtering)
24
+ * [Query with sorting](#query-with-sorting)
25
+ * [Query with grouping](#query-with-grouping)
26
+ * [Query with facets](#query-with-facets)
27
+ * [Query with boosting functions](#query-with-boosting-functions)
28
+ * [Dictionary boosting function](#dictionary-boosting-function)
29
+ * [Field list](#field-list)
30
+ * [Deleting documents](#deleting-documents)
31
+ * [Active Support instrumentation](#active-support-instrumentation)
32
+ * [Running specs](#running-specs)
33
+
34
+
35
+
36
+ # Configuration
37
+
38
+ ## Setting Solr URL via environment variable
17
39
 
18
40
  The simplest way to use Solrb is `SORL_URL` environment variable (that has a core name in it):
19
41
 
@@ -21,19 +43,23 @@ The simplest way to use Solrb is `SORL_URL` environment variable (that has a cor
21
43
  ENV['SOLR_URL'] = 'http://localhost:8983/solr/demo'
22
44
  ```
23
45
 
24
- or through `Solr.configure` to specify the solr URL:
46
+
47
+ You can also use `Solr.configure` to specify the solr URL explicitly:
25
48
 
26
49
  ```ruby
27
- # Single core configuration
28
50
  Solr.configure do |config|
29
51
  config.url = 'http://localhost:8983/solr/demo'
30
52
  end
31
53
  ```
32
54
 
55
+ It's important to note that those fields that are not configured, will be passed as-is to solr.
56
+ *So you only need to specify fields in configuration if you want Solrb to modify them at runtime*.
57
+
58
+ ## Single core configuration
59
+
33
60
  Use `Solr.configure` for an additional configuration:
34
61
 
35
62
  ```ruby
36
- # Single core configuration
37
63
  Solr.configure do |config|
38
64
  config.url = 'http://localhost:8983/solr/demo'
39
65
 
@@ -50,8 +76,9 @@ Solr.configure do |config|
50
76
  end
51
77
  ```
52
78
 
79
+ ## Multiple core configuration
80
+
53
81
  ```ruby
54
- # Multiple core configuration
55
82
  Solr.configure do |config|
56
83
  config.url = 'http://localhost:8983/solr'
57
84
 
@@ -79,10 +106,6 @@ Solr.configure do |config|
79
106
  end
80
107
  ```
81
108
 
82
- It's important to note that those fields that are not configured, will be passed as-is to solr.
83
- *So you only need to specify fields in configuration if you want Solrb to modify them at runtime*.
84
-
85
-
86
109
  Warning: Solrb doesn't support fields with the same name. If you have two fields with the same name mapping
87
110
  to a single solr field, you'll have to rename one of the fields.
88
111
 
@@ -97,9 +120,8 @@ end
97
120
  ...
98
121
  ```
99
122
 
100
- ## Usage
101
123
 
102
- ### Indexing
124
+ # Indexing
103
125
 
104
126
  ```ruby
105
127
  # creates a single document and commits it to index
@@ -117,9 +139,9 @@ You can also create indexing document directly from attributes:
117
139
  doc = Solr::Indexing::Document.new(id: 5, name: 'John')
118
140
  ```
119
141
 
120
- ### Querying
142
+ # Querying
121
143
 
122
- #### Simple Query
144
+ ## Simple Query
123
145
 
124
146
  ```ruby
125
147
  field = Solr::Query::Request::FieldWithBoost.new(field: :name)
@@ -127,8 +149,19 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
127
149
  request = Solr::Query::Request.new(search_term: 'term', fields: [field])
128
150
  request.run(page: 1, page_size: 10)
129
151
  ```
152
+ ## Querying multiple cores
130
153
 
131
- #### Query with field boost
154
+ For multi-core configuration use `Solr.with_core` block:
155
+
156
+ ```ruby
157
+ Solr.with_core(:models) do
158
+ Solr.delete_by_id(3242343)
159
+ Solr::Query::Request.new(search_term: 'term', fields: fields)
160
+ Solr::Indexing::Request.new(documents: [doc])
161
+ end
162
+ ```
163
+
164
+ ## Query with field boost
132
165
 
133
166
  ```ruby
134
167
  fields = [
@@ -140,7 +173,7 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
140
173
  request.run(page: 1, page_size: 10)
141
174
  ```
142
175
 
143
- #### Query with filters
176
+ ## Query with filtering
144
177
 
145
178
  ```ruby
146
179
  fields = [
@@ -153,7 +186,7 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
153
186
  ```
154
187
 
155
188
 
156
- #### Query with sorting
189
+ ## Query with sorting
157
190
 
158
191
  ```ruby
159
192
  fields = [
@@ -166,7 +199,7 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
166
199
  request.run(page: 1, page_size: 10)
167
200
  ```
168
201
 
169
- #### Query with grouping
202
+ ## Query with grouping
170
203
 
171
204
  ```ruby
172
205
  fields = [
@@ -178,7 +211,7 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
178
211
  request.run(page: 1, page_size: 10)
179
212
  ```
180
213
 
181
- #### Query with facets
214
+ ## Query with facets
182
215
 
183
216
  ```ruby
184
217
  fields = [
@@ -190,7 +223,7 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
190
223
  request.run(page: 1, page_size: 10)
191
224
  ```
192
225
 
193
- #### Query with boosting functions
226
+ ## Query with boosting functions
194
227
 
195
228
  ```ruby
196
229
  fields = [
@@ -204,8 +237,34 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
204
237
  )
205
238
  request.run(page: 1, page_size: 10)
206
239
  ```
240
+ ### Dictionary boosting function
241
+ Sometimes you want to do a dictionary-style boosting
242
+ example: given a hash (dictionary)
243
+
244
+ ```ruby
245
+ {3025 => 2.0, 3024 => 1.5, 3023 => 1.2}
246
+ ```
207
247
 
208
- #### Field list
248
+ and a field of `category_id`
249
+ the resulting boosting function will be:
250
+ ```
251
+ if(eq(category_id_it, 3025), 2.0, if(eq(category_id_it, 3024), 1.5, if(eq(category_id_it, 3023), 1.2, 1)))
252
+ ```
253
+ note that I added spaces for readability, real Solr query functions must always be w/out spaces
254
+
255
+ Example of usage:
256
+
257
+ ```ruby
258
+ category_id_boosts = {3025 => 2.0, 3024 => 1.5, 3023 => 1.2}
259
+ request.boosting = Solr::Query::Request::Boosting.new(
260
+ multiplicative_boost_functions: [
261
+ Solr::Query::Request::Boosting::DictionaryBoostFunction.new(field: :category_id,
262
+ dictionary: category_id_boosts)
263
+ ]
264
+ )
265
+ ```
266
+
267
+ ## Field list
209
268
 
210
269
 
211
270
  ```ruby
@@ -220,7 +279,7 @@ doc = Solr::Indexing::Document.new(id: 5, name: 'John')
220
279
  request.run(page: 1, page_size: 10)
221
280
  ```
222
281
 
223
- ### Deleting documents
282
+ # Deleting documents
224
283
 
225
284
  ```ruby
226
285
  Solr.delete_by_id(3242343)
@@ -229,19 +288,26 @@ Solr.delete_by_query('*:*')
229
288
  Solr.delete_by_query('*:*', commit: true)
230
289
  ```
231
290
 
232
- ### Using multi-core configuration
291
+ # Active Support instrumentation
233
292
 
234
- For multi-core configuration use `Solr.with_core` block:
293
+ This gem publishes events via [Active Support Instrumentation](https://edgeguides.rubyonrails.org/active_support_instrumentation.html)
294
+
295
+ To subscribe to solrb events, you can add this code to initializer:
235
296
 
236
297
  ```ruby
237
- Solr.with_core(:models) do
238
- Solr.delete_by_id(3242343)
239
- Solr::Query::Request.new(search_term: 'term', fields: fields)
240
- Solr::Indexing::Request.new(documents: [doc])
298
+ ActiveSupport::Notifications.subscribe('request.solrb') do |*args|
299
+ event = ActiveSupport::Notifications::Event.new(*args)
300
+ if Logger::INFO == Rails.logger.level
301
+ Rails.logger.info("Solrb #{event.duration.round(1)}ms")
302
+ elsif Logger::DEBUG == Rails.logger.level && Rails.env.development?
303
+ Pry::ColorPrinter.pp(event.payload)
304
+ end
241
305
  end
242
306
  ```
243
307
 
244
- ## Running specs
308
+
309
+
310
+ # Running specs
245
311
 
246
312
  This project is setup to use CI to run all specs agains a real solr.
247
313
 
@@ -1,7 +1,7 @@
1
1
  module Solr
2
2
  # low-level connection that can do network requests to Solr
3
3
  class Connection
4
- INSTRUMENT_KEY = 'solrb.request'.freeze
4
+ INSTRUMENT_KEY = 'request.solrb'.freeze
5
5
 
6
6
  def initialize(url, faraday_options: Solr.configuration.faraday_options)
7
7
  # Allow mock the connection for testing
@@ -22,10 +22,7 @@ module Solr
22
22
 
23
23
  def run
24
24
  raw_response = connection(PATH).post_as_json(request_params)
25
- response = Solr::Response.from_raw_response(raw_response)
26
- Solr.instrument(name: 'solrb.request_response_cycle',
27
- data: { request: request_params, response: raw_response })
28
- response
25
+ Solr::Response.from_raw_response(raw_response)
29
26
  end
30
27
 
31
28
  private
data/lib/solr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Solr
2
- VERSION = '0.1.4'.freeze
2
+ VERSION = '0.1.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adriano Luz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-09-18 00:00:00.000000000 Z
12
+ date: 2018-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable