Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: v4.8.1
Fetching contributors…

Cannot retrieve contributors at this time

96 lines (85 sloc) 2.709 kb
module Picky
module Backends
#
#
class Backend
# This is the default behaviour and should be overridden
# for different backends.
#
# Returns an object that on #initial, #load returns
# an object that responds to:
# [:token] # => [id, id, id, id, id] (an array of ids)
#
def create_inverted bundle
json bundle.index_path(:inverted)
end
# Returns an object that on #initial, #load returns
# an object that responds to:
# [:token] # => 1.23 (a weight)
#
def create_weights bundle
json bundle.index_path(:weights)
end
# # Returns an object that on #initial, #load returns
# # an object that responds to:
# # [:encoded] # => [:original, :original] (an array of original symbols this similarity encoded thing maps to)
# #
# def create_similarity bundle
# Marshal.new bundle.index_path(:similarity)
# end
# Returns an object that on #initial, #load returns
# an object that responds to:
# [:key] # => value (a value for this config key)
#
def create_configuration bundle
json bundle.index_path(:configuration)
end
# Returns an object that on #initial, #load returns
# an object that responds to:
# [id] # => [:sym1, :sym2]
#
def create_realtime bundle
json bundle.index_path(:realtime)
end
# Returns the total score of the combinations.
#
# Default implementation. Override to speed up.
#
def weight combinations
combinations.score
end
# Returns the result ids for the allocation.
#
# Sorts the ids by size and & through them in the following order (sizes):
# 0. [100_000, 400, 30, 2]
# 1. [2, 30, 400, 100_000]
# 2. (100_000 & (400 & (30 & 2))) # => result
#
# Note: Uses a C-optimized intersection routine (in performant.c)
# for speed and memory efficiency.
#
# Note: In the memory based version we ignore the amount and
# offset hints.
# We cannot use the information to speed up the algorithm,
# unfortunately.
#
def ids combinations, _, _
# Get the ids for each combination.
#
id_arrays = combinations.inject([]) do |total, combination|
total << combination.ids
end
# Call the optimized C algorithm.
#
# Note: It orders the passed arrays by size.
#
Performant::Array.memory_efficient_intersect id_arrays
end
#
#
def to_s
self.class.name
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.