Class: Spinel::Backend

Inherits:
Base
  • Object
show all
Defined in:
lib/spinel/backend.rb

Instance Attribute Summary

Attributes inherited from Base

#type

Instance Method Summary collapse

Methods inherited from Base

#base, #base_and, #cachebase, #cachekey, #database, #initialize

Methods included from Helper

#document_aliases, #document_body, #document_id, #document_score, #document_to_phrase, #document_validate, #prefixes_for_phrase

Constructor Details

This class inherits a constructor from Spinel::Base

Instance Method Details

#add(doc, opts = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/spinel/backend.rb', line 4

def add(doc, opts = {})
  opts = { skip_duplicate_check: false }.merge(opts)
  document_validate doc
  id = document_id doc

  remove(id: id) unless opts[:skip_duplicate_check]

  Spinel.redis.pipelined do
    Spinel.redis.hset(database, id, MultiJson.encode(doc))
    prefixes_for_phrase(document_to_phrase(doc)).each do |p|
      Spinel.redis.zadd(base_and(p), document_score(doc), id)
    end
  end
end

#get(id) ⇒ Object



19
20
21
22
23
# File 'lib/spinel/backend.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/backend.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_for_phrase(document_to_phrase(prev_doc)).each do |p|
        Spinel.redis.zrem(base_and(p), prev_id)
      end
    end
  end
end