anchor.diff:        });
       }
   
  -    // reduce base results if filter did remove a package
  -    final Score filtered = base.project(packages);
  +    // do text matching
  +    final Score textScore = _searchText(packages, query.parsedQuery.text);
  +    final Score filtered = textScore ?? _initScore(packages);
   
       List<PackageScore> results;
       switch (query.order ?? SearchOrder.top) {
  
positive.code: 
    @override
    Future<PackageSearchResult> search(SearchQuery query) async {
      // do text matching
      final Score textScore = _searchText(query.parsedQuery.text);
      final Score base = textScore ?? _allPackages();
  
      // The set of packages to filter on.
      final Set<String> packages = base.getKeys();
  
      // filter on package prefix
      if (query.parsedQuery?.packagePrefix != null) {
  
negative.code:     return new Score(values);
    }
  
    Score _initScore(Iterable<String> keys) =>
        new Score(new Map.fromIterable(keys, value: (_) => 1.0));
  
    Score _searchText(Set<String> packages, String text) {
      if (text != null && text.isNotEmpty) {
        final List<String> words = text.split(' ');
        final int wordCount = words.length;
  