anchor.diff:              fraction: 0.01, minValue: 0.001);
         }).toList();
         Score score = Score.multiply(wordScores);
  +      // Ideally this projection should happen earlier (in both lookupTokens and
  +      // scoreDocs), but for the sake of simplicity it is done here.
  +      score = score.project(packages);
   
         // filter results based on exact phrases
         final List<String> phrases =
  
positive.code:       });
      }
  
      // reduce base results if filter did remove a package
      final Score filtered = base.project(packages);
  
      List<PackageScore> results;
      switch (query.order ?? SearchOrder.top) {
  
negative.code: 
    @override
    Future<PackageSearchResult> search(SearchQuery query) async {
      final Set<String> packages = new Set.from(_packages.keys);
  
      // filter on package prefix
      if (query.parsedQuery?.packagePrefix != null) {
  