     [ '.', [ "^https?://", "\\W+$" ].map (re) -> new RegExp re ]
   ]
 
+  # Boost a score by a factor (in the range (0,1.0)), while keeping the score in the range [0,1].  This makes
+  # greater adjustments to scores near the middle of the range (so, very poor relevancy scores remain poor).
+  @boostRelevancyScore: (factor, score) ->
+    score + if score < 0.5 then score * factor else (1.0 - score) * factor
+
 class BookmarkCompleter
   folderSeparator: "/"
   currentSearch: null

    factor = Math.max 0.0, Math.min 1.0, Settings.get "omniSearchWeight"
    haveCompletionEngine = (0.0 < factor or custom) and CompletionSearch.haveCompletionEngine searchUrl

    # Relevancy:
    #   - Relevancy does not depend upon the actual suggestion (so, it does not depend upon word
    #     relevancy, say).  We assume that the completion engine has already factored that in.  Also,
    #     completion engines sometimes handle spelling mistakes, in which case we wouldn't find the query
    #     terms in the suggestion anyway.
    #   - Scores are weighted such that they retain the order provided by the completion engine.
    #   - The relavancy is higher if the query term is longer.  The idea is that search suggestions are more
    #     likely to be relevant if, after typing some number of characters, the user hasn't yet found
    #     a useful suggestion from another completer.
    #
    characterCount = query.length - queryTerms.length + 1
    relevancy = (if custom then 0.5 else factor) * 12.0 / Math.max 12.0, characterCount

    # This filter is applied to all of the suggestions from all of the completers, after they have been
    # aggregated by the MultiCompleter.

      onComplete suggestions,
        filter: filter
        continuation: (suggestions, onComplete) =>
          CompletionSearch.complete searchUrl, queryTerms, (suggestions = []) =>
            console.log "fetched suggestions:", suggestions.length, query if SearchEngineCompleter.debug
            onComplete suggestions.map mkSuggestion

  computeRelevancy: ({ relevancyData, queryTerms, title }) ->
    # Tweaks:
    # - Calibration: we boost relevancy scores to try to achieve an appropriate balance between relevancy
    #   scores here, and those provided by other completers.
    # - Relevancy depends only on the title (which is the search terms), and not on the URL.
    Suggestion.boostRelevancyScore 0.5,
      relevancyData * RankingUtils.wordRelevancy queryTerms, title, title

# A completer which calls filter() on many completers, aggregates the results, ranks them, and returns the top
# 10. All queries from the vomnibar come through a multi completer.
