Class: Redis::Commands::Search::HybridPostProcessingConfig
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/redis/commands/modules/search/hybrid.rb |
Overview
Class Method Summary
- .new ⇒ HybridPostProcessingConfig constructor
Instance Method Summary
-
#apply(**kwexpr) ⇒ self
Add one
APPLYstep per expression. -
#build_args ⇒ Array
Render the post-processing pipeline into its argument tokens.
-
#filter(flt) ⇒ self
Add a
FILTERstep. -
#group_by(fields, *reducers) ⇒ self
Add a
GROUPBYstep with optionalREDUCEfunctions. -
#limit(offset, num) ⇒ self
Add a
LIMIT(paging) step. -
#load(*fields) ⇒ self
Add a
LOADstep loading the given fields. -
#sort_by(*sortby_fields) ⇒ self
Add a
SORTBYstep.
Constructor Details
.new ⇒ HybridPostProcessingConfig
# File 'lib/redis/commands/modules/search/hybrid.rb', line 222
def initialize @load_statements = [] @apply_statements = [] @groupby_statements = [] @sortby_fields = [] @filter = nil @limit = nil end
Instance Method Details
#apply(**kwexpr) ⇒ self
Add one APPLY step per expression.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 264
def apply(**kwexpr) apply_args = [] kwexpr.each do |alias_name, expr| ret = ["APPLY", expr] ret.concat(["AS", alias_name.to_s]) if alias_name apply_args.concat(ret) end @apply_statements.concat(apply_args) self end
#build_args ⇒ Array
Render the post-processing pipeline into its argument tokens.
Steps are emitted in order: LOAD, GROUPBY, APPLY, SORTBY, FILTER, LIMIT.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 308
def build_args args = [] args.concat(@load_statements) if @load_statements.any? args.concat(@groupby_statements) if @groupby_statements.any? args.concat(@apply_statements) if @apply_statements.any? if @sortby_fields.any? sortby_args = [] @sortby_fields.each do |f| sortby_args.concat(f.args) end args.concat(["SORTBY", sortby_args.size, *sortby_args]) end args.concat(@filter.args) if @filter args.concat(["LIMIT", @limit[:offset], @limit[:num]]) if @limit args end
#filter(flt) ⇒ self
Add a FILTER step.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 288
def filter(flt) @filter = flt self end
#group_by(fields, *reducers) ⇒ self
Add a GROUPBY step with optional REDUCE functions.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 249
def group_by(fields, *reducers) ret = ["GROUPBY", Array(fields).size.to_s, *Array(fields)] reducers.each do |reducer| ret.concat(["REDUCE", reducer.name, reducer.args.size.to_s]) ret.concat(reducer.args) ret.concat(["AS", reducer.alias_name]) if reducer.alias_name end @groupby_statements.concat(ret) self end
#limit(offset, num) ⇒ self
Add a LIMIT (paging) step.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 298
def limit(offset, num) @limit = { offset: offset, num: num } self end
#load(*fields) ⇒ self
Add a LOAD step loading the given fields.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 235
def load(*fields) unless fields.empty? fields_str = fields.join(" ") fields_list = fields_str.split(" ") @load_statements.concat(["LOAD", fields_list.size, *fields_list]) end self end
#sort_by(*sortby_fields) ⇒ self
Add a SORTBY step.
# File 'lib/redis/commands/modules/search/hybrid.rb', line 279
def sort_by(*sortby_fields) @sortby_fields = sortby_fields self end