public String getProspectsByKeywords(String keywords) 
      throws EntityNotFoundException  {
    String queryString = null;
    try {
      queryString = URLDecoder.decode(keywords.toLowerCase(), UTF8);
    } catch (UnsupportedEncodingException e) {
      // This should never happen...
      e.printStackTrace();
    }
    
    Gson gson = new Gson();
    List<ProspectAbbrev> prospects = new ArrayList<ProspectAbbrev>();
    try {
      IndexSpec indexSpec = IndexSpec.newBuilder().setName(R.Doc.INDEX).build();
      Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
      Results<ScoredDocument> results = index.search(queryString);

      // Build JSON array of results
      for (ScoredDocument doc : results) {
        long id = Long.parseLong(doc.getId());
        Key key = KeyFactory.createKey(R.Prospect.ENTITY_TYPE, id);
        Entity entity = null;
        try {
          entity = datastore.get(key);
        }
        catch (EntityNotFoundException e) {
          log.log(Level.INFO, id + " not found. Skipping...");
          continue;
        }
        ProfileOutput profile = 
            gson.fromJson(((Text) entity.getProperty(
                R.Prospect.PROFILE)).getValue(), 
                ProfileInput.class).convertToOutput();
        Rankings rankings = 
            gson.fromJson(((Text) entity.getProperty(
                R.Prospect.RANKINGS)).getValue(), Rankings.class);
        prospects.add(new ProspectAbbrev(
            id,
            profile.getName(), 
            profile.getPosition().getAltNames().get(0), // Long verion of position name
            profile.getSchool().getAltNames().get(0), // Short version of school name
            profile.getSchool().getMascot(),
            profile.getSchool().getLogo(), 
            rankings.getOverallRank()));
      }
    }
    catch (SearchException e) {
      if (StatusCode.TRANSIENT_ERROR.equals(e.getOperationResult().getCode())) {
        // TODO
      }
    }
    Collections.sort(prospects);
    return gson.toJson(prospects);
  }