Sha256: 2274b4abf27d40d9491ec8717f461b8fcbcadf869c3f88ea85ce5c30f02fc7b6
Contents?: true
Size: 949 Bytes
Versions: 1
Compression:
Stored size: 949 Bytes
Contents
module Soulmate class Matcher < Base def matches_for_term(term, options = {}) options = { :limit => 5, :cache => true }.merge(options) words = normalize(term).split(' ').reject do |w| w.size < MIN_COMPLETE or STOP_WORDS.include?(w) end.sort return [] if words.empty? cachekey = "#{cachebase}:" + words.join('|') if !options[:cache] || !Soulmate.redis.exists(cachekey) interkeys = words.map { |w| "#{base}:#{w}" } Soulmate.redis.zinterstore(cachekey, interkeys) Soulmate.redis.expire(cachekey, 10 * 60) # expire after 10 minutes end ids = Soulmate.redis.zrevrange(cachekey, 0, options[:limit] - 1) if ids.size > 0 Soulmate.redis.hmget(database, *ids) .reject{ |r| r.nil? } # handle cached results for ids which have since been deleted .map { |r| MultiJson.decode(r) } else [] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
soulmate-0.0.5 | lib/soulmate/matcher.rb |