redi_search 6.3.0 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +3 -3
- data/.github/workflows/tests.yml +6 -6
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/Appraisals +5 -5
- data/Gemfile +4 -1
- data/gemfiles/{activerecord_60.gemfile → activerecord_71.gemfile} +1 -1
- data/lib/redi_search/aggregate/clauses/apply.rb +24 -0
- data/lib/redi_search/aggregate/clauses/filter.rb +22 -0
- data/lib/redi_search/aggregate/clauses/group_by.rb +79 -0
- data/lib/redi_search/aggregate/clauses/limit.rb +28 -0
- data/lib/redi_search/aggregate/clauses/load.rb +22 -0
- data/lib/redi_search/aggregate/clauses/sort_by.rb +43 -0
- data/lib/redi_search/aggregate/clauses/verbatim.rb +17 -0
- data/lib/redi_search/aggregate/reducers/average.rb +26 -0
- data/lib/redi_search/aggregate/reducers/count.rb +23 -0
- data/lib/redi_search/aggregate/reducers/distinct_count.rb +26 -0
- data/lib/redi_search/aggregate/reducers/distinctish_count.rb +26 -0
- data/lib/redi_search/aggregate/reducers/max.rb +26 -0
- data/lib/redi_search/aggregate/reducers/min.rb +26 -0
- data/lib/redi_search/aggregate/reducers/quantile.rb +30 -0
- data/lib/redi_search/aggregate/reducers/stdev.rb +26 -0
- data/lib/redi_search/aggregate/reducers/sum.rb +26 -0
- data/lib/redi_search/aggregate/reducers/to_list.rb +26 -0
- data/lib/redi_search/aggregate.rb +104 -0
- data/lib/redi_search/application_clause.rb +37 -0
- data/lib/redi_search/client.rb +5 -4
- data/lib/redi_search/index.rb +6 -0
- data/lib/redi_search/log_subscriber.rb +8 -3
- data/lib/redi_search/model.rb +5 -1
- data/lib/redi_search/schema/tag_field.rb +8 -0
- data/lib/redi_search/schema.rb +10 -10
- data/lib/redi_search/search/clauses/highlight.rb +3 -1
- data/lib/redi_search/search/clauses/in_order.rb +2 -0
- data/lib/redi_search/search/clauses/language.rb +1 -0
- data/lib/redi_search/search/clauses/limit.rb +1 -0
- data/lib/redi_search/search/clauses/no_content.rb +2 -0
- data/lib/redi_search/search/clauses/no_stop_words.rb +2 -0
- data/lib/redi_search/search/clauses/return.rb +1 -0
- data/lib/redi_search/search/clauses/slop.rb +1 -0
- data/lib/redi_search/search/clauses/sort_by.rb +1 -0
- data/lib/redi_search/search/clauses/timeout.rb +24 -0
- data/lib/redi_search/search/clauses/verbatim.rb +2 -0
- data/lib/redi_search/search/clauses/with_payloads.rb +17 -0
- data/lib/redi_search/search/clauses/with_scores.rb +2 -0
- data/lib/redi_search/search/clauses/with_sort_keys.rb +17 -0
- data/lib/redi_search/search/clauses.rb +36 -55
- data/lib/redi_search/search/{clauses → queries}/and.rb +1 -1
- data/lib/redi_search/search/{clauses → queries}/boolean.rb +4 -4
- data/lib/redi_search/search/{clauses → queries}/or.rb +1 -1
- data/lib/redi_search/search/{clauses → queries}/where.rb +2 -2
- data/lib/redi_search/search/queries.rb +39 -0
- data/lib/redi_search/search.rb +7 -6
- data/lib/redi_search/version.rb +1 -1
- data/redi_search.gemspec +2 -6
- metadata +34 -60
- data/lib/redi_search/search/clauses/application_clause.rb +0 -31
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RediSearch
|
4
|
+
class Search
|
5
|
+
module Queries
|
6
|
+
def where(**condition)
|
7
|
+
@query = Search::Queries::Where.new(self, condition, @query)
|
8
|
+
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
def not(**condition)
|
13
|
+
raise NoMethodError unless @query.is_a?(Search::Queries::Where)
|
14
|
+
|
15
|
+
@query.not(condition)
|
16
|
+
end
|
17
|
+
|
18
|
+
def and(new_term = nil, **term_options)
|
19
|
+
@query = Queries::And.new(self, new_term, @query, **term_options)
|
20
|
+
|
21
|
+
if new_term.nil?
|
22
|
+
@query
|
23
|
+
else
|
24
|
+
self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def or(new_term = nil, **term_options)
|
29
|
+
@query = Queries::Or.new(self, new_term, @query, **term_options)
|
30
|
+
|
31
|
+
if new_term.nil?
|
32
|
+
@query
|
33
|
+
else
|
34
|
+
self
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/redi_search/search.rb
CHANGED
@@ -5,8 +5,9 @@ module RediSearch
|
|
5
5
|
extend Forwardable
|
6
6
|
include LazilyLoad
|
7
7
|
include Clauses
|
8
|
+
include Queries
|
8
9
|
|
9
|
-
attr_reader :
|
10
|
+
attr_reader :query, :used_clauses, :index, :clauses
|
10
11
|
|
11
12
|
def_delegator :index, :model
|
12
13
|
|
@@ -15,8 +16,7 @@ module RediSearch
|
|
15
16
|
@clauses = []
|
16
17
|
@used_clauses = Set.new
|
17
18
|
|
18
|
-
@
|
19
|
-
And.new(self, term, nil, **term_options)
|
19
|
+
@query = term && And.new(self, term, nil, **term_options)
|
20
20
|
end
|
21
21
|
|
22
22
|
def results
|
@@ -31,7 +31,7 @@ module RediSearch
|
|
31
31
|
|
32
32
|
def explain
|
33
33
|
RediSearch.client.call!(
|
34
|
-
"EXPLAINCLI", index.name,
|
34
|
+
"EXPLAINCLI", index.name, query.to_s
|
35
35
|
).join(" ").strip
|
36
36
|
end
|
37
37
|
|
@@ -44,7 +44,8 @@ module RediSearch
|
|
44
44
|
attr_writer :index, :clauses
|
45
45
|
|
46
46
|
def command
|
47
|
-
["SEARCH", index.name,
|
47
|
+
["SEARCH", index.name, query.to_s,
|
48
|
+
*clauses.sort_by(&:clause_order).flat_map(&:clause)]
|
48
49
|
end
|
49
50
|
|
50
51
|
def parse_response(response)
|
@@ -52,7 +53,7 @@ module RediSearch
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def valid?
|
55
|
-
!
|
56
|
+
!query.to_s.empty?
|
56
57
|
end
|
57
58
|
end
|
58
59
|
end
|
data/lib/redi_search/version.rb
CHANGED
data/redi_search.gemspec
CHANGED
@@ -26,13 +26,9 @@ Gem::Specification.new do |spec|
|
|
26
26
|
"changelog_uri" => "https://github.com/npezza93/redi_search/releases",
|
27
27
|
}
|
28
28
|
|
29
|
-
spec.required_ruby_version = ">=
|
29
|
+
spec.required_ruby_version = ">= 3.0"
|
30
30
|
|
31
|
-
spec.add_runtime_dependency "activesupport", ">= 5.1", "<
|
31
|
+
spec.add_runtime_dependency "activesupport", ">= 5.1", "< 8.0"
|
32
32
|
spec.add_runtime_dependency "redis", ">= 4.0", "< 6.0"
|
33
33
|
spec.add_runtime_dependency "zeitwerk"
|
34
|
-
|
35
|
-
spec.add_development_dependency "bundler", ">= 1.17", "< 3"
|
36
|
-
spec.add_development_dependency "minitest", "~> 5.0"
|
37
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
38
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redi_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Pezza
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '5.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '8.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '5.1'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '8.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: redis
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,54 +64,6 @@ dependencies:
|
|
64
64
|
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '0'
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: bundler
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '1.17'
|
74
|
-
- - "<"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '3'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '1.17'
|
84
|
-
- - "<"
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: '3'
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: minitest
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - "~>"
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '5.0'
|
94
|
-
type: :development
|
95
|
-
prerelease: false
|
96
|
-
version_requirements: !ruby/object:Gem::Requirement
|
97
|
-
requirements:
|
98
|
-
- - "~>"
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: '5.0'
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: rake
|
103
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
-
requirements:
|
105
|
-
- - "~>"
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version: '13.0'
|
108
|
-
type: :development
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - "~>"
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: '13.0'
|
115
67
|
description:
|
116
68
|
email: pezza@hey.com
|
117
69
|
executables: []
|
@@ -136,11 +88,30 @@ files:
|
|
136
88
|
- bin/publish
|
137
89
|
- bin/setup
|
138
90
|
- gemfiles/.bundle/config
|
139
|
-
- gemfiles/activerecord_60.gemfile
|
140
91
|
- gemfiles/activerecord_61.gemfile
|
141
92
|
- gemfiles/activerecord_70.gemfile
|
93
|
+
- gemfiles/activerecord_71.gemfile
|
142
94
|
- lib/redi_search.rb
|
143
95
|
- lib/redi_search/add_field.rb
|
96
|
+
- lib/redi_search/aggregate.rb
|
97
|
+
- lib/redi_search/aggregate/clauses/apply.rb
|
98
|
+
- lib/redi_search/aggregate/clauses/filter.rb
|
99
|
+
- lib/redi_search/aggregate/clauses/group_by.rb
|
100
|
+
- lib/redi_search/aggregate/clauses/limit.rb
|
101
|
+
- lib/redi_search/aggregate/clauses/load.rb
|
102
|
+
- lib/redi_search/aggregate/clauses/sort_by.rb
|
103
|
+
- lib/redi_search/aggregate/clauses/verbatim.rb
|
104
|
+
- lib/redi_search/aggregate/reducers/average.rb
|
105
|
+
- lib/redi_search/aggregate/reducers/count.rb
|
106
|
+
- lib/redi_search/aggregate/reducers/distinct_count.rb
|
107
|
+
- lib/redi_search/aggregate/reducers/distinctish_count.rb
|
108
|
+
- lib/redi_search/aggregate/reducers/max.rb
|
109
|
+
- lib/redi_search/aggregate/reducers/min.rb
|
110
|
+
- lib/redi_search/aggregate/reducers/quantile.rb
|
111
|
+
- lib/redi_search/aggregate/reducers/stdev.rb
|
112
|
+
- lib/redi_search/aggregate/reducers/sum.rb
|
113
|
+
- lib/redi_search/aggregate/reducers/to_list.rb
|
114
|
+
- lib/redi_search/application_clause.rb
|
144
115
|
- lib/redi_search/client.rb
|
145
116
|
- lib/redi_search/client/response.rb
|
146
117
|
- lib/redi_search/configuration.rb
|
@@ -161,22 +132,25 @@ files:
|
|
161
132
|
- lib/redi_search/schema/text_field.rb
|
162
133
|
- lib/redi_search/search.rb
|
163
134
|
- lib/redi_search/search/clauses.rb
|
164
|
-
- lib/redi_search/search/clauses/and.rb
|
165
|
-
- lib/redi_search/search/clauses/application_clause.rb
|
166
|
-
- lib/redi_search/search/clauses/boolean.rb
|
167
135
|
- lib/redi_search/search/clauses/highlight.rb
|
168
136
|
- lib/redi_search/search/clauses/in_order.rb
|
169
137
|
- lib/redi_search/search/clauses/language.rb
|
170
138
|
- lib/redi_search/search/clauses/limit.rb
|
171
139
|
- lib/redi_search/search/clauses/no_content.rb
|
172
140
|
- lib/redi_search/search/clauses/no_stop_words.rb
|
173
|
-
- lib/redi_search/search/clauses/or.rb
|
174
141
|
- lib/redi_search/search/clauses/return.rb
|
175
142
|
- lib/redi_search/search/clauses/slop.rb
|
176
143
|
- lib/redi_search/search/clauses/sort_by.rb
|
144
|
+
- lib/redi_search/search/clauses/timeout.rb
|
177
145
|
- lib/redi_search/search/clauses/verbatim.rb
|
178
|
-
- lib/redi_search/search/clauses/
|
146
|
+
- lib/redi_search/search/clauses/with_payloads.rb
|
179
147
|
- lib/redi_search/search/clauses/with_scores.rb
|
148
|
+
- lib/redi_search/search/clauses/with_sort_keys.rb
|
149
|
+
- lib/redi_search/search/queries.rb
|
150
|
+
- lib/redi_search/search/queries/and.rb
|
151
|
+
- lib/redi_search/search/queries/boolean.rb
|
152
|
+
- lib/redi_search/search/queries/or.rb
|
153
|
+
- lib/redi_search/search/queries/where.rb
|
180
154
|
- lib/redi_search/search/result.rb
|
181
155
|
- lib/redi_search/search/term.rb
|
182
156
|
- lib/redi_search/spellcheck.rb
|
@@ -204,14 +178,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
178
|
requirements:
|
205
179
|
- - ">="
|
206
180
|
- !ruby/object:Gem::Version
|
207
|
-
version:
|
181
|
+
version: '3.0'
|
208
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
183
|
requirements:
|
210
184
|
- - ">="
|
211
185
|
- !ruby/object:Gem::Version
|
212
186
|
version: '0'
|
213
187
|
requirements: []
|
214
|
-
rubygems_version: 3.4.
|
188
|
+
rubygems_version: 3.4.20
|
215
189
|
signing_key:
|
216
190
|
specification_version: 4
|
217
191
|
summary: RediSearch ruby wrapper that can integrate with Rails
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RediSearch
|
4
|
-
class Search
|
5
|
-
module Clauses
|
6
|
-
class ApplicationClause
|
7
|
-
include Validatable
|
8
|
-
|
9
|
-
class << self
|
10
|
-
def clause_term(term, **validations)
|
11
|
-
attr_reader term
|
12
|
-
|
13
|
-
validations.each do |validation_type, options|
|
14
|
-
define_validation(term, validation_type, options)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def define_validation(term, type, options)
|
21
|
-
if options.is_a? Hash
|
22
|
-
public_send("validates_#{type}_of", term, **options)
|
23
|
-
else
|
24
|
-
public_send("validates_#{type}_of", term)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|