Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

63 lines (55 sloc) 1.899 kb
module Picky
module Backends
class Memory < Backend
# Returns an object that responds to:
# [:token] # => [id, id, id, id, id] (an array of ids)
#
def create_inverted bundle
JSON.new bundle.index_path(:inverted)
end
# Returns an object that responds to:
# [:token] # => 1.23 (a weight)
#
def create_weights bundle
JSON.new bundle.index_path(:weights)
end
# 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 responds to:
# [:key] # => value (a value for this config key)
#
def create_configuration bundle
JSON.new bundle.index_path(:configuration)
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
end
end
end
Jump to Line
Something went wrong with that request. Please try again.