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