lsolr 0.1.4 → 0.1.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.
- checksums.yaml +4 -4
- data/lib/lsolr.rb +38 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05c41bbf755a942358b8103e341c059d3a062da1
|
4
|
+
data.tar.gz: 0a74f0bb97acf6dcc385433964d90cba915b84c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b97854d45e33b3f03dc64f1a985a892d3a94169d7a2a14d0970d9adb926094dbcc21cda9e878f4f5f7cd40678ddf2071bd8d5624312981f73926260b882eeb2a
|
7
|
+
data.tar.gz: 6e18db2a61a038353498e3cd4c1992a51e510d517aeecb448c05a4cb96321f08e046839ff58c48909fb4f338bfc9c4deaece64bdfd5f9fc73d5bb99749b0d4ae
|
data/lib/lsolr.rb
CHANGED
@@ -84,11 +84,15 @@ class LSolr
|
|
84
84
|
class << self
|
85
85
|
# Builds composite query and returns builder instance.
|
86
86
|
#
|
87
|
-
# @param params [Hash{Symbol => String, Integer, Float, true, false, Range, Date, Time}] query terms
|
87
|
+
# @param params [Hash{Symbol => String, Integer, Float, true, false, Range, Date, Time}, String] query terms or a raw query
|
88
88
|
#
|
89
89
|
# @return [LSolr] a instance
|
90
90
|
def build(params)
|
91
|
-
params
|
91
|
+
case params
|
92
|
+
when Hash then params.map { |f, v| build_query(f, v) }.reduce { |a, e| a.and(e) }
|
93
|
+
when String then new.raw(params)
|
94
|
+
else raise TypeError, 'Could not build solr query. Please specify a Hash or String value.'
|
95
|
+
end
|
92
96
|
end
|
93
97
|
|
94
98
|
private
|
@@ -106,7 +110,7 @@ class LSolr
|
|
106
110
|
end
|
107
111
|
|
108
112
|
def build_array_query(field, values)
|
109
|
-
return
|
113
|
+
return new(field) if values.empty?
|
110
114
|
|
111
115
|
values.map { |v| build_query(field, v) }.reduce { |a, e| a.or(e) }.wrap
|
112
116
|
end
|
@@ -128,28 +132,29 @@ class LSolr
|
|
128
132
|
|
129
133
|
# Create a new query builder instance.
|
130
134
|
#
|
131
|
-
# @param field [String] a field name
|
135
|
+
# @param field [String, Symbol] a field name
|
132
136
|
# @return [LSolr] a instance
|
133
|
-
def initialize(field)
|
134
|
-
raise ArgumentError, 'Please specify a field name.' if field.nil? || field.empty?
|
135
|
-
|
137
|
+
def initialize(field = '')
|
136
138
|
@expr_not = ''
|
137
|
-
@field = field
|
139
|
+
@field = field.to_s
|
138
140
|
@value = ''
|
139
141
|
@range_first = ''
|
140
142
|
@range_last = ''
|
141
143
|
@boost = ''
|
142
144
|
@left_parentheses = []
|
143
145
|
@right_parentheses = []
|
146
|
+
@raw = ''
|
144
147
|
end
|
145
148
|
|
146
149
|
# Returns Apache Solr standard lucene type query string.
|
147
150
|
#
|
148
151
|
# @return [String] a stringified query
|
149
152
|
def to_s # rubocop:disable Metrics/AbcSize
|
150
|
-
|
151
|
-
raise IncompleteQueryError, 'Please specify a search value.' if blank?
|
153
|
+
raise IncompleteQueryError, 'Please specify search field and value.' if blank?
|
152
154
|
|
155
|
+
return @raw unless @raw.empty?
|
156
|
+
|
157
|
+
@value = "#{@range_first} #{TO} #{@range_last}" if range_search?
|
153
158
|
expr = "#{expr_not}#{left_parentheses.join}#{@field}:#{@value}#{right_parentheses.join}"
|
154
159
|
expr = "#{prev} #{operator} #{expr}" if !prev.nil? && prev.present?
|
155
160
|
"#{expr}#{@boost}"
|
@@ -157,11 +162,12 @@ class LSolr
|
|
157
162
|
|
158
163
|
alias to_str to_s
|
159
164
|
|
160
|
-
# A query is blank if
|
165
|
+
# A query is blank if term is incomplete in expression.
|
161
166
|
#
|
162
167
|
# @return [true, false]
|
163
168
|
def blank?
|
164
|
-
@value.empty? && (@range_first.empty? || @range_last.empty?)
|
169
|
+
managed_query_absence = @field.empty? || (@value.empty? && (@range_first.empty? || @range_last.empty?))
|
170
|
+
managed_query_absence && @raw.empty?
|
165
171
|
end
|
166
172
|
|
167
173
|
# A query is present if it's not blank.
|
@@ -171,6 +177,26 @@ class LSolr
|
|
171
177
|
!blank?
|
172
178
|
end
|
173
179
|
|
180
|
+
# Sets a field name.
|
181
|
+
#
|
182
|
+
# @param f [String, Symbol] a field name
|
183
|
+
#
|
184
|
+
# @return [LSolr] self instance
|
185
|
+
def field(f)
|
186
|
+
@field = f.to_s
|
187
|
+
self
|
188
|
+
end
|
189
|
+
|
190
|
+
# Sets a raw query.
|
191
|
+
#
|
192
|
+
# @param q [String] raw query
|
193
|
+
#
|
194
|
+
# @return [LSolr] self instance
|
195
|
+
def raw(q)
|
196
|
+
@raw = q.to_s
|
197
|
+
self
|
198
|
+
end
|
199
|
+
|
174
200
|
# Adds parentheses to query expression.
|
175
201
|
#
|
176
202
|
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#grouping-terms-to-form-sub-queries Grouping Terms to Form Sub-Queries
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taishi Kasuga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: LSolr is a query builder of Apache Solr standard Lucene type query for
|
14
14
|
Ruby.
|