Sha256: 836c112f0130c2ddfe2d82f2c8e958e277852c7ebaef08b489ffcdf74733eb02
Contents?: true
Size: 1.87 KB
Versions: 4
Compression:
Stored size: 1.87 KB
Contents
module Lunar class Index attr :ns def self.create(prefix) new(prefix).tap { |i| yield i }.index end def self.delete(prefix, key) new(prefix).tap { |i| i.key key }.delete end def initialize(prefix, redis = nil) @ns = Lunar.nest[prefix] @attrs = {} @redis = (redis || Lunar.redis) @numeric_attrs = {} end def key(key = nil) @key = key if key @key end def attrs=(attrs) attrs.each { |k, v| attr k, v } end def attr(field, value = nil) @attrs[field.to_sym] = value if value @attrs[field.to_sym] end def numeric_attr(field, value = nil) @numeric_attrs[field.to_sym] = value if value @numeric_attrs[field.to_sym] end alias :integer :numeric_attr alias :float :numeric_attr def index index_str_attrs index_numeric_attrs return self end def delete keys = @redis.keys @ns[key]['*'] keys.each do |k| field = k.gsub("#{ @ns[key] }:", '') words = @redis.smembers(k) words.each do |w| @redis.zrem @ns[field][Lunar.encode(w)], key end @redis.del k end end protected def index_str_attrs @attrs.each do |field, value| scoring = Scoring.new(value) words = [] scoring.scores.each do |word, score| words << word @redis.zadd @ns[field][Lunar.encode(word)], score, key @redis.sadd @ns[key][field], word end unused_words = @redis.smembers(@ns[key][field]) - words unused_words.each do |word| @redis.zrem @ns[field][Lunar.encode(word)], key @redis.srem @ns[key][field], word end end end def index_numeric_attrs @numeric_attrs.each do |field, value| @redis.zadd @ns[field], value, key end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
lunar-0.2.3 | lib/lunar/index.rb |
lunar-0.2.2 | lib/lunar/index.rb |
lunar-0.2.1 | lib/lunar/index.rb |
lunar-0.2.0 | lib/lunar/index.rb |