module Spinel::Indexer
Public Instance Methods
get(id)
click to toggle source
# File lib/spinel/indexer.rb, line 19 def get id if doc = Spinel.redis.hget(database, id) MultiJson.decode(doc) end end
remove(doc)
click to toggle source
# File lib/spinel/indexer.rb, line 25 def remove doc if prev_doc = Spinel.redis.hget(database, document_id(doc)) prev_doc = MultiJson.decode(prev_doc) prev_id = document_id prev_doc Spinel.redis.pipelined do Spinel.redis.hdel(database, prev_id) prefixes(document_index_fields(prev_doc)).each do |p| Spinel.redis.zrem(index(p), prev_id) end end end end
store(doc, opts = {})
click to toggle source
# File lib/spinel/indexer.rb, line 4 def store doc, opts = {} opts = { skip_duplicate_check: false }.merge(opts) id, body, score = get_valid_document doc remove(id: id) unless opts[:skip_duplicate_check] Spinel.redis.pipelined do Spinel.redis.hset(database, id, MultiJson.encode(doc)) prefixes(body).each do |p| Spinel.redis.zadd(index(p), score, id) end end doc end