solrb 0.1.9 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ec22b8f3fb8d4af1362389b30173de437f3a66e0a56fd11189a66aa28c0a4f2
4
- data.tar.gz: 36ae13f391bc00291bd4661c1ac910b6cdc2242f0c090a64d11c2385bca39274
3
+ metadata.gz: b9c229eff6ef2d2cef01522d3aac36ed852fcf37d2eddaebdf3545ede67cb7a1
4
+ data.tar.gz: 35b41eebe98c7d45cbaee285f19fe39a246ec9d3a250e4aa4a06a93b6733e543
5
5
  SHA512:
6
- metadata.gz: ef11a6e93954a9b5245861b4753f722aa6f936f91fe2523ac4c31b685cf300cb37ae07247b24e70515914053d2e96330501bcb213c07aeef15cc6168c5540c71
7
- data.tar.gz: 743961e7ae4540f4e67362554470bc3485ddab0ddfc557d4b0d27fd99b51c91b64c333e2a24a9a7839b9d87d7b514142e4302a701ba73f4a51be20a213f12c8c
6
+ metadata.gz: f364be89ae580d4b987c6bd097c9a4d68750c0c73cdc9ae15b8b263efff52bff65ed26f410fa9ffe42f958aee934cc932765af6d4d8128a519477b06d5835a9f
7
+ data.tar.gz: 8352cfffca004a27bc9105cdf020931e57967bd6ea512a5f0764bb91de65ee13c0111e721fa7bb7e361f697cb08570a2f9d5490f27056bca60daf5fea5c8a929
data/README.md CHANGED
@@ -39,14 +39,14 @@ Object-Oriented approach to Solr in Ruby.
39
39
  Add `solrb` to your Gemfile:
40
40
 
41
41
  ```ruby
42
- gem solrb
42
+ gem 'solrb'
43
43
  ```
44
44
 
45
45
  If you are going to use solrb with solr cloud:
46
46
 
47
47
  ```ruby
48
- gem zk # required for solrb solr-cloud integration
49
- gem solrb
48
+ gem 'zk' # required for solrb solr-cloud integration
49
+ gem 'solrb'
50
50
  ```
51
51
 
52
52
  # Configuration
@@ -362,8 +362,8 @@ Example of usage:
362
362
  ]
363
363
  request = Solr::Query::Request.new(search_term: 'term', fields: fields)
364
364
  # Solr::Query::Request will return only :id field by default.
365
- # Specify additional return fields (fl param) by setting the request response_fields
366
- request.response_fields = [:name, :category]
365
+ # Specify additional return fields (fl param) by setting the request field_list
366
+ request.field_list = [:name, :category]
367
367
  request.run(page: 1, page_size: 10)
368
368
  ```
369
369
 
data/lib/solr/document.rb CHANGED
@@ -12,15 +12,16 @@ module Solr
12
12
  end
13
13
  end
14
14
 
15
- attr_reader :id, :model_name, :score, :debug_info, :group
15
+ attr_reader :id, :model_name, :score, :debug_info, :group, :fields
16
16
 
17
17
  # TODO: model_name is specific for machinio
18
- def initialize(id:, model_name: nil, score: nil, debug_info: nil, group: GroupInformation.empty)
18
+ def initialize(id:, model_name: nil, score: nil, debug_info: nil, group: GroupInformation.empty, fields: {})
19
19
  @id = id
20
20
  @model_name = model_name
21
21
  @score = score
22
22
  @debug_info = debug_info
23
23
  @group = group
24
+ @fields = fields
24
25
  end
25
26
  end
26
27
  end
@@ -6,14 +6,15 @@ module Solr
6
6
  include Solr::Support::SchemaHelper
7
7
 
8
8
  EDISMAX_QUERY_FIELDS = :qf
9
- EDISMAX_FILTER_QUERY = :fq
10
9
  EDISMAX_ADDITIVE_BOOST_FUNCTION = :bf
11
10
  EDISMAX_MULTIPLICATIVE_BOOST_FUNCTION = :boost
12
11
  EDISMAX_PHRASE_BOOST = :pf
13
12
  EDISMAX_PHRASE_SLOP = :ps
14
- RESPONSE_FIELDS = :fl
13
+ FILTER_QUERY = :fq
14
+ FIELD_LIST = :fl
15
15
  RERANK_QUERY = :rq
16
16
  QUERY_OPERATOR = :'q.op'
17
+ JSON_FACET = :'json.facet'
17
18
 
18
19
  attr_reader :request
19
20
 
@@ -24,7 +25,7 @@ module Solr
24
25
  def to_h
25
26
  solr_params = { q: request.search_term, defType: :edismax }
26
27
  solr_params = add_query_fields(solr_params)
27
- solr_params = add_response_fields(solr_params)
28
+ solr_params = add_field_list(solr_params)
28
29
  solr_params = add_filters(solr_params)
29
30
  solr_params = add_facets(solr_params)
30
31
  solr_params = add_boosting(solr_params)
@@ -41,20 +42,20 @@ module Solr
41
42
  private
42
43
 
43
44
  def add_query_fields(solr_params)
44
- fields = request.fields.map(&:to_solr_s)
45
- solr_params.merge(EDISMAX_QUERY_FIELDS => fields)
45
+ query_fields = request.query_fields.map(&:to_solr_s)
46
+ solr_params[EDISMAX_QUERY_FIELDS] = query_fields
47
+ solr_params
46
48
  end
47
49
 
48
50
  def add_filters(solr_params)
49
51
  filters = request.filters.map(&:to_solr_s)
50
- solr_params.merge(EDISMAX_FILTER_QUERY => filters)
52
+ solr_params[FILTER_QUERY] = filters
53
+ solr_params
51
54
  end
52
-
55
+
53
56
  def add_facets(solr_params)
54
57
  return solr_params if Array(request.facets).empty?
55
-
56
- solr_params['json.facet'] = request.facets.map(&:to_solr_h).reduce(&:merge).to_json
57
-
58
+ solr_params[JSON_FACET] = request.facets.map(&:to_solr_h).reduce(&:merge).to_json
58
59
  solr_params
59
60
  end
60
61
 
@@ -68,16 +69,15 @@ module Solr
68
69
  def add_additive_boost_functions(solr_params)
69
70
  additive_boosts = request.boosting.additive_boost_functions.map(&:to_solr_s)
70
71
  if additive_boosts.any?
71
- solr_params.merge(EDISMAX_ADDITIVE_BOOST_FUNCTION => additive_boosts)
72
- else
73
- solr_params
72
+ solr_params[EDISMAX_ADDITIVE_BOOST_FUNCTION] = additive_boosts
74
73
  end
74
+ solr_params
75
75
  end
76
76
 
77
77
  def add_multiplicative_boost_functions(solr_params)
78
78
  multiplicative_boosts = request.boosting.multiplicative_boost_functions.map(&:to_solr_s)
79
79
  if multiplicative_boosts.any?
80
- solr_params = solr_params.merge(EDISMAX_MULTIPLICATIVE_BOOST_FUNCTION => multiplicative_boosts)
80
+ solr_params[EDISMAX_MULTIPLICATIVE_BOOST_FUNCTION] = multiplicative_boosts
81
81
  # https://stackoverflow.com/questions/47025453/
82
82
  maybe_add_spatial_fields(solr_params, request.boosting.spatial_boost)
83
83
  else
@@ -88,18 +88,16 @@ module Solr
88
88
  def add_phrase_boosts(solr_params)
89
89
  solr_phrase_boosts = request.boosting.phrase_boosts.map(&:to_solr_s)
90
90
  if solr_phrase_boosts.any?
91
- solr_params.merge(EDISMAX_PHRASE_BOOST => solr_phrase_boosts)
92
- else
93
- solr_params
91
+ solr_params[EDISMAX_PHRASE_BOOST] = solr_phrase_boosts
94
92
  end
93
+ solr_params
95
94
  end
96
95
 
97
96
  def maybe_add_spatial_fields(solr_params, geodist_function)
98
97
  if geodist_function
99
- solr_params.merge(pt: geodist_function.latlng, sfield: geodist_function.sfield)
100
- else
101
- solr_params
98
+ solr_params.merge!(pt: geodist_function.latlng, sfield: geodist_function.sfield)
102
99
  end
100
+ solr_params
103
101
  end
104
102
 
105
103
  def add_grouping(solr_params)
@@ -116,18 +114,20 @@ module Solr
116
114
  def add_sorting(solr_params)
117
115
  return solr_params if request.sorting.empty?
118
116
  solr_sorting = request.sorting.fields.map(&:to_solr_s).join(', ')
119
- solr_params.merge(sort: solr_sorting)
117
+ solr_params[:sort] = solr_sorting
118
+ solr_params
120
119
  end
121
120
 
122
- def add_response_fields(solr_params)
123
- response_fields = 'id'
124
- response_fields += ',score' if debug_mode?
125
- response_fields += request.response_fields if request.response_fields
126
- solr_params.merge(RESPONSE_FIELDS => response_fields)
121
+ def add_field_list(solr_params)
122
+ request.field_list.fields << :score if debug_mode?
123
+ field_list = request.field_list.to_solr_s
124
+ solr_params[FIELD_LIST] = field_list
125
+ solr_params
127
126
  end
128
127
 
129
128
  def add_debug(solr_params)
130
- solr_params.merge(debug: debug_mode?)
129
+ solr_params[:debug] = debug_mode?
130
+ solr_params
131
131
  end
132
132
 
133
133
  def debug_mode?
@@ -141,17 +141,20 @@ module Solr
141
141
  def add_rerank_query(solr_params)
142
142
  return solr_params unless request.limit_docs_by_field
143
143
  rerank_query = request.limit_docs_by_field.to_solr_s
144
- solr_params.merge(RERANK_QUERY => rerank_query)
144
+ solr_params[RERANK_QUERY] = rerank_query
145
+ solr_params
145
146
  end
146
147
 
147
148
  def add_phrase_slop(solr_params)
148
149
  return solr_params unless request.phrase_slop
149
- solr_params.merge(EDISMAX_PHRASE_SLOP => request.phrase_slop)
150
+ solr_params[EDISMAX_PHRASE_SLOP] = request.phrase_slop
151
+ solr_params
150
152
  end
151
153
 
152
154
  def add_query_operator(solr_params)
153
155
  return solr_params unless request.query_operator
154
- solr_params.merge(QUERY_OPERATOR => request.query_operator)
156
+ solr_params[QUERY_OPERATOR] = request.query_operator
157
+ solr_params
155
158
  end
156
159
  end
157
160
  end
@@ -0,0 +1,25 @@
1
+ module Solr
2
+ module Query
3
+ class Request
4
+ class FieldList
5
+ include Solr::Support::SchemaHelper
6
+
7
+ MANDATORY_FIELDS = %i[id].freeze
8
+
9
+ attr_accessor :fields
10
+
11
+ def initialize(fields: [])
12
+ @fields = fields
13
+ end
14
+
15
+ def empty?
16
+ fields.empty?
17
+ end
18
+
19
+ def to_solr_s
20
+ (MANDATORY_FIELDS + fields.map(&method(:solarize_field))).uniq.join(',')
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -7,6 +7,7 @@ require 'solr/query/request/edismax_adapter'
7
7
  require 'solr/query/request/grouping'
8
8
  require 'solr/query/request/boosting'
9
9
  require 'solr/query/request/spellcheck'
10
+ require 'solr/query/request/field_list'
10
11
  require 'solr/query/request/sorting/field'
11
12
  require 'solr/query/request/sorting/function'
12
13
  require 'solr/query/request/field_with_boost'
@@ -18,13 +19,14 @@ module Solr
18
19
  module Query
19
20
  class Request
20
21
  attr_reader :search_term
21
- attr_accessor :filters, :fields, :facets, :boosting, :debug_mode, :spellcheck,
22
- :limit_docs_by_field, :phrase_slop, :response_fields, :query_operator
22
+ attr_accessor :filters, :query_fields, :field_list, :facets, :boosting, :debug_mode, :spellcheck,
23
+ :limit_docs_by_field, :phrase_slop, :query_operator
23
24
  attr_writer :grouping, :sorting
24
25
 
25
- def initialize(search_term:, fields: [], filters: [])
26
+ def initialize(search_term:, query_fields: [], field_list: Solr::Query::Request::FieldList.new, filters: [])
26
27
  @search_term = search_term
27
- @fields = fields
28
+ @query_fields = query_fields
29
+ @field_list = field_list
28
30
  @filters = filters
29
31
  end
30
32
 
@@ -72,7 +72,8 @@ module Solr
72
72
  def parse_regular_documents
73
73
  solr_response['response']['docs'].map do |d|
74
74
  debug_info = solr_response.dig('debug', 'explain', d['id'])
75
- Document.new(id: d['id'], score: d['score'], debug_info: debug_info)
75
+ fields = d.dup.delete_if { |k, v| %w[id score].include?(k) }
76
+ Document.new(id: d['id'], score: d['score'], debug_info: debug_info, fields: fields)
76
77
  end
77
78
  end
78
79
 
@@ -82,8 +83,9 @@ module Solr
82
83
  next unless doc
83
84
  debug_info = solr_response.dig('debug', 'explain', doc['id'])
84
85
  group_information = Document::GroupInformation.new(key: solr_grouping_field, value: group['groupValue'])
86
+ fields = doc.dup.delete_if { |k, v| %w[id score].include?(k) }
85
87
  Document.new(id: doc['id'], score: doc['score'],
86
- debug_info: debug_info, group: group_information)
88
+ debug_info: debug_info, group: group_information, fields: fields)
87
89
  end
88
90
  end.flatten.compact
89
91
  end
data/lib/solr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Solr
2
- VERSION = '0.1.9'.freeze
2
+ VERSION = '0.2.0'.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.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adriano Luz
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-02-07 00:00:00.000000000 Z
13
+ date: 2019-02-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -220,6 +220,7 @@ files:
220
220
  - lib/solr/query/request/boosting/textual_field_value_match_boost_function.rb
221
221
  - lib/solr/query/request/edismax_adapter.rb
222
222
  - lib/solr/query/request/facet.rb
223
+ - lib/solr/query/request/field_list.rb
223
224
  - lib/solr/query/request/field_with_boost.rb
224
225
  - lib/solr/query/request/filter.rb
225
226
  - lib/solr/query/request/geo_filter.rb
@@ -272,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
272
273
  version: '0'
273
274
  requirements: []
274
275
  rubyforge_project:
275
- rubygems_version: 2.7.8
276
+ rubygems_version: 2.7.6
276
277
  signing_key:
277
278
  specification_version: 4
278
279
  summary: Solr Ruby client with a nice object-oriented API