/** Starts a new search using the specified uri target and query parameters. */
  private void doStart(String uriTarget, Map<String, String> queryParams, HttpResponse response)
      throws IOException {

    // Get parameters to start search.
    String searchQuery = queryParams.get("q");

    // Create search.
    SearchDetails searchDetails = RestSearchDetails.createKeywordSearch(searchQuery);
    Search search = searchFactory.createSearch(searchDetails);

    // Add search to search manager.  The search is monitored so it will
    // be cancelled if we stop polling for its results.
    SearchResultList searchList = searchManager.addMonitoredSearch(search, searchDetails);

    // Start search.
    search.start();

    try {
      // Return search metadata.
      JSONObject jsonObj = RestUtils.createSearchJson(searchList);
      HttpEntity entity = RestUtils.createStringEntity(jsonObj.toString());
      response.setEntity(entity);
      response.setStatusCode(HttpStatus.SC_OK);

    } catch (JSONException ex) {
      throw new IOException(ex);
    }
  }