class RediSearcher::Document

Constants

OPTIONS_FLAGS
OPTIONS_PARAMS

Attributes

doc_id[R]
fields[R]
index[R]
weight[R]

Public Class Methods

new(index, doc_id, weight = nil, **fields) click to toggle source
# File lib/redi_searcher/document.rb, line 14
def initialize(index, doc_id, weight = nil, **fields)
  @index = index
  @doc_id = doc_id
  @fields = filter_by_schema(fields)
  @weight = weight || RediSearcher::DEFAULT_WEIGHT
end

Public Instance Methods

add(**options) click to toggle source
# File lib/redi_searcher/document.rb, line 21
def add(**options)
  index.client.call(ft_add(options))
end
del(**options) click to toggle source
# File lib/redi_searcher/document.rb, line 25
def del(**options)
  index.client.call(ft_del(options))
end

Private Instance Methods

filter_by_schema(fields) click to toggle source
# File lib/redi_searcher/document.rb, line 56
def filter_by_schema(fields)
  fields.slice(*schema_fields.keys)
end
ft_add(**options) click to toggle source
# File lib/redi_searcher/document.rb, line 31
def ft_add(**options)
  ['FT.ADD', index.name , doc_id, weight, *serialize_options(:add, options), 'FIELDS', *serialize_fields]
end
ft_del(**options) click to toggle source
# File lib/redi_searcher/document.rb, line 35
def ft_del(**options)
  ['FT.DEL', index.name , doc_id, *serialize_options(:del, options)]
end
schema_fields() click to toggle source
# File lib/redi_searcher/document.rb, line 52
def schema_fields
  Hash[index.schema.fields.map {|field| [field.name, {type: field.type, options: field.options}] }]
end
serialize_fields() click to toggle source
# File lib/redi_searcher/document.rb, line 39
def serialize_fields
  fields.map do |key, value|
    if value.is_a? Array
      value = serialize_tag_array(value, schema_fields[key][:options][:separator]) if schema_fields[key][:type] == :tag
    end
    [(key.to_s rescue key) || key, value]
  end.compact
end
serialize_tag_array(values, separator) click to toggle source
# File lib/redi_searcher/document.rb, line 48
def serialize_tag_array(values, separator)
  values.map { |value| value.to_s.gsub(separator, '') }.join(separator)
end