lsolr 0.0.2 → 0.0.3
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 +95 -22
- 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: 611d522d19f5adbfae542ed8d066d5b9f7e0517e
|
4
|
+
data.tar.gz: 32066b63f4377d5d64e85f4c35965476d1ed6f81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fab35b495e36c5d0754fd137f323b854ae08970dda8859d6a21c712175e11c0a95c4750ad7a5f83795e9ed6439c990be2e04c69e4913fd667b88517ce9ce754e
|
7
|
+
data.tar.gz: 67256e547e5dcdc89d96b89445d5bc119ae1d1b5bd0dfc355d03aeb8a6aec890496fade7e46ccef8987f433b4724b6417411fec6adf04f7a8f227373ed7a1c78
|
data/lib/lsolr.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# A query builder of Apache Solr standard Lucene type query for Ruby.
|
4
|
+
#
|
3
5
|
# @example How to use.
|
4
6
|
# monoclinic = LSolr.new(:crystal_system).match(:monoclinic)
|
5
7
|
# cubic = LSolr.new(:crystal_system).match(:cubic)
|
@@ -35,7 +37,9 @@ class LSolr
|
|
35
37
|
|
36
38
|
attr_accessor :prev, :operator, :left_parentheses, :right_parentheses
|
37
39
|
|
38
|
-
#
|
40
|
+
# Create a new query builder instance.
|
41
|
+
#
|
42
|
+
# @param field [String] a field name
|
39
43
|
# @return [LSolr] a instance
|
40
44
|
def initialize(field)
|
41
45
|
raise ArgumentError, 'Please specify a field name.' if field.nil? || field.empty?
|
@@ -50,7 +54,9 @@ class LSolr
|
|
50
54
|
@right_parentheses = []
|
51
55
|
end
|
52
56
|
|
53
|
-
#
|
57
|
+
# Returns Apache Solr standard lucene type query string.
|
58
|
+
#
|
59
|
+
# @return [String] a stringified query
|
54
60
|
def to_s
|
55
61
|
@value = "#{@range_first} #{TO} #{@range_last}" if range_search?
|
56
62
|
raise 'Please specify a search condition.' if blank?
|
@@ -60,18 +66,24 @@ class LSolr
|
|
60
66
|
"#{expr}#{@boost}"
|
61
67
|
end
|
62
68
|
|
63
|
-
|
64
|
-
|
69
|
+
alias to_str to_s
|
70
|
+
|
71
|
+
# A query is blank if value is empty in expression.
|
72
|
+
#
|
73
|
+
# @return [true, false]
|
65
74
|
def blank?
|
66
75
|
@value.empty? && (@range_first.empty? || @range_last.empty?)
|
67
76
|
end
|
68
77
|
|
69
|
-
#
|
70
|
-
#
|
78
|
+
# A query is present if it's not blank.
|
79
|
+
#
|
80
|
+
# @return [true, false]
|
71
81
|
def present?
|
72
82
|
!blank?
|
73
83
|
end
|
74
84
|
|
85
|
+
# Adds parentheses to query expression.
|
86
|
+
#
|
75
87
|
# @return [LSolr] copied self instance
|
76
88
|
def wrap
|
77
89
|
this = dup
|
@@ -80,47 +92,73 @@ class LSolr
|
|
80
92
|
this
|
81
93
|
end
|
82
94
|
|
95
|
+
# Adds the boolean operator `NOT` to query expression.
|
96
|
+
#
|
97
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#the-boolean-operator-not The Boolean Operator NOT ("!")
|
98
|
+
#
|
83
99
|
# @return [LSolr] self instance
|
84
100
|
def not
|
85
101
|
@not = "#{NOT} "
|
86
102
|
self
|
87
103
|
end
|
88
104
|
|
105
|
+
# Boosts a query expression.
|
106
|
+
#
|
107
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#boosting-a-term-with Boosting a Term with "^"
|
108
|
+
#
|
89
109
|
# @param weight [Float] boost weight
|
110
|
+
#
|
90
111
|
# @return [LSolr] self instance
|
91
112
|
def boost(weight)
|
92
113
|
@boost = "#{BOOST}#{weight}"
|
93
114
|
self
|
94
115
|
end
|
95
116
|
|
96
|
-
#
|
117
|
+
# Builds a normal query expression.
|
118
|
+
#
|
119
|
+
# @param value [String, Integer, true, false] a search word or a filter value
|
120
|
+
#
|
97
121
|
# @return [LSolr] self instance
|
98
122
|
def match(value)
|
99
123
|
values = clean(value).split
|
100
124
|
if values.size > 1
|
101
125
|
phrase_match(values)
|
102
126
|
else
|
103
|
-
@value = values.join
|
127
|
+
@value = values.join
|
104
128
|
self
|
105
129
|
end
|
106
130
|
end
|
107
131
|
|
108
|
-
#
|
132
|
+
# Builds a normal query expression with dates and times.
|
133
|
+
#
|
134
|
+
# @param value [String] a filter value
|
135
|
+
#
|
109
136
|
# @return [LSolr] self instance
|
110
137
|
def date_time_match(value)
|
111
138
|
@value = clean(value, symbols: RESERVED_SYMBOLS - %w[- : . / +])
|
112
139
|
self
|
113
140
|
end
|
114
141
|
|
115
|
-
#
|
142
|
+
# Builds a prefix search query expression.
|
143
|
+
#
|
144
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#wildcard-searches Wildcard Searches
|
145
|
+
#
|
146
|
+
# @param value [String] a search word
|
147
|
+
#
|
116
148
|
# @return [LSolr] self instance
|
117
149
|
def prefix_match(value)
|
118
150
|
@value = clean(value, symbols: RESERVED_SYMBOLS - %w[* ?])
|
119
151
|
self
|
120
152
|
end
|
121
153
|
|
122
|
-
#
|
154
|
+
# Builds a phrase or proximity search query expression.
|
155
|
+
#
|
156
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#grouping-clauses-within-a-field Grouping Clauses within a Field
|
157
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#proximity-searches Proximity Searches
|
158
|
+
#
|
159
|
+
# @param values [Array<String>] search words
|
123
160
|
# @param distance [Integer] proximity distance
|
161
|
+
#
|
124
162
|
# @return [LSolr] self instance
|
125
163
|
def phrase_match(values, distance: 0)
|
126
164
|
value = values.map { |v| clean(v) }.join(REPLACEMENT_CHAR)
|
@@ -129,8 +167,13 @@ class LSolr
|
|
129
167
|
self
|
130
168
|
end
|
131
169
|
|
132
|
-
#
|
133
|
-
#
|
170
|
+
# Builds a fuzzy search query expression.
|
171
|
+
#
|
172
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#fuzzy-searches Fuzzy Searches
|
173
|
+
#
|
174
|
+
# @param value [String] a search word
|
175
|
+
# @param distance [Float] a proximity distance
|
176
|
+
#
|
134
177
|
# @return [LSolr] self instance
|
135
178
|
def fuzzy_match(value, distance: 0.0)
|
136
179
|
raise RangeError, "Out of #{FUZZY_MATCH_DISTANCE_RANGE}. #{distance} given." unless FUZZY_MATCH_DISTANCE_RANGE.member?(distance)
|
@@ -138,42 +181,72 @@ class LSolr
|
|
138
181
|
self
|
139
182
|
end
|
140
183
|
|
141
|
-
#
|
184
|
+
# Builds a range search query expression.
|
185
|
+
#
|
186
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
|
187
|
+
#
|
188
|
+
# @param value [String, Integer] a filter value
|
189
|
+
#
|
142
190
|
# @return [LSolr] self instance
|
143
191
|
def greater_than(value)
|
144
192
|
@range_first = "#{GREATER_THAN}#{value}"
|
145
193
|
self
|
146
194
|
end
|
147
195
|
|
148
|
-
#
|
196
|
+
# Builds a range search query expression.
|
197
|
+
#
|
198
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
|
199
|
+
#
|
200
|
+
# @param value [String, Integer] a filter value
|
201
|
+
#
|
149
202
|
# @return [LSolr] self instance
|
150
203
|
def less_than(value)
|
151
204
|
@range_last = "#{value}#{LESS_THAN}"
|
152
205
|
self
|
153
206
|
end
|
154
207
|
|
155
|
-
#
|
208
|
+
# Builds a range search query expression.
|
209
|
+
#
|
210
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
|
211
|
+
#
|
212
|
+
# @param value [String, Integer] a filter value
|
213
|
+
#
|
156
214
|
# @return [LSolr] self instance
|
157
215
|
def greater_than_or_equal_to(value)
|
158
216
|
@range_first = "#{GREATER_THAN_OR_EQUAL_TO}#{value}"
|
159
217
|
self
|
160
218
|
end
|
161
219
|
|
162
|
-
#
|
220
|
+
# Builds a range search query expression.
|
221
|
+
#
|
222
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
|
223
|
+
#
|
224
|
+
# @param value [String, Integer] a filter value
|
225
|
+
#
|
163
226
|
# @return [LSolr] self instance
|
164
227
|
def less_than_or_equal_to(value)
|
165
228
|
@range_last = "#{value}#{LESS_THAN_OR_EQUAL_TO}"
|
166
229
|
self
|
167
230
|
end
|
168
231
|
|
169
|
-
#
|
170
|
-
#
|
232
|
+
# Builds a composite query expression.
|
233
|
+
#
|
234
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#the-boolean-operator-and The Boolean Operator AND ("&&")
|
235
|
+
#
|
236
|
+
# @param another [LSolr] another query builder instance
|
237
|
+
#
|
238
|
+
# @return [LSolr] copied another query builder instance
|
171
239
|
def and(another)
|
172
240
|
link(another, AND)
|
173
241
|
end
|
174
242
|
|
175
|
-
#
|
176
|
-
#
|
243
|
+
# Builds a composite query expression.
|
244
|
+
#
|
245
|
+
# @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#boolean-operators-supported-by-the-standard-query-parser Boolean Operators Supported by the Standard Query Parser
|
246
|
+
#
|
247
|
+
# @param another [LSolr] another query builder instance
|
248
|
+
#
|
249
|
+
# @return [LSolr] copied another query builder instance
|
177
250
|
def or(another)
|
178
251
|
link(another, OR)
|
179
252
|
end
|
@@ -192,7 +265,7 @@ class LSolr
|
|
192
265
|
|
193
266
|
def clean(value, symbols: RESERVED_SYMBOLS)
|
194
267
|
value.to_s
|
195
|
-
.tr(symbols.join
|
268
|
+
.tr(symbols.join, REPLACEMENT_CHAR)
|
196
269
|
.gsub(RESERVED_WORDS) { |match| "\\#{match}" }
|
197
270
|
end
|
198
271
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taishi Kasuga
|
@@ -38,7 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
38
|
version: '0'
|
39
39
|
requirements: []
|
40
40
|
rubyforge_project:
|
41
|
-
rubygems_version: 2.6.
|
41
|
+
rubygems_version: 2.6.13
|
42
42
|
signing_key:
|
43
43
|
specification_version: 4
|
44
44
|
summary: A query builder of Apache Solr for Ruby
|