code: function fuzzyScore(item, term, relevances){
  
      // If we have a string, just match it directly
      if(typeof item == 'string') return fuzzyScoreStr(item, term);
  
      // Initialize the return object
      var result = {
        __score: 0,
        valueOf: function(){ return this.__score; },
        highlights: {}
      };
  
      // Loop through all the specified properties
      for(var i in relevances){
        if(!relevances.hasOwnProperty(i) || !item.hasOwnProperty(i)) continue;
  
        // Grab the score for that particular property
        var thatScore = fuzzyScoreStr(item[i], term);
  
        // Add the rank on to the return object
        result.__score += relevances[i] * thatScore;
        result.highlights[i] = thatScore > 0 ? thatScore.highlights : [];
      }
  
      return result;
    }
docs: ## fuzzyScore
  
  Matches an object against a given term with particular weights being
  applied to different properties. If the given item is instead a string,
  just match it directly against the term.
  
  The `relevances` parameter should be an object containing properties
  with the same names as those on `item` that should be counted. For
  example, a value of `{ propA: 2, propB: 1 }` would count matches in
  `propA` twice as highly as matches in `propB`.
  
  The returned `highlights` property contains arrays of character indices
  to highlight in the term, indexed by the same property names
  
  @param {object} item Item containing multiple properties to search
  @param {string} term Term against which to search
  @param {object} relevances Object congaining key/val pairs as above
  @return {object} Rank of `item` against `term` with highlights.