def save target, weights, options = {}
      raise ":source need to be set" if options[:source].nil?
      source = options[:source]
      @sources[source] ||= []
      @sources[source] << target
      weights.keys.each do |key|
        add weights[key], key, target
      end
    end
def save target, weights, options = {}
      raise ":source need to be set" if options[:source].nil?
      source = options[:source]
      @sources[source] ||= []
      @sources[source] << target
      weights.keys.each do |key|
        add weights[key], key, target
      end
    end
target is a simple value - we care not what
 weights are all fragments (indices) and their weight
 eg. { "aba" => 1, "ab" => 1, "ba" => 1, "b" => 1, "a" => 2 } for the string "aba"