Module: Spinel::Indexer
- Included in:
- Client
- Defined in:
- lib/spinel/indexer.rb
Instance Method Summary collapse
Instance Method Details
#get(id) ⇒ Object
19 20 21 22 23 |
# File 'lib/spinel/indexer.rb', line 19 def get id if doc = Spinel.redis.hget(database, id) MultiJson.decode(doc) end end |
#remove(doc) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 |
# 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 = {}) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 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 |