docs: function abstract_search(req, res, personality, queries, filters, lite_p){
  
      // Theoretical good result envelope to start.
      var envl = null;
      if( lite_p ){
  	envl = new envelope('/api/autocomplete/' + personality);
      }else{
  	envl = new envelope('/api/search/' + personality);
      }
  
      // Note arguments.
      var args = {};
      if( ! us.isEmpty(queries) ){ args['q'] = queries; }
      if( ! us.isEmpty(filters) ){ args['fq'] = filters; }
      envl.arguments(args);
  
      // Setup manager and basic.
      var srch_report = personality + '; queries: ' + queries.join(', ') +
  	    '; filters: ' +  filters.join(', ');
      ll('Setting up manager to search for: ' + srch_report);
      var gconf = new golr_conf.conf(amigo.data.golr);
      var engine = new node_engine(golr_response);
      var manager = new golr_manager(golr_url, gconf, engine, 'async');
      var found_personality = manager.set_personality(personality);
      manager.set_facet_limit(0); // care not about facets
      var doc_cat = gconf.get_class(personality).document_category();
  
      // Basic sanity checks before main.
      if( ! found_personality ){
  	return _response_json_fail(res, envl,
  				   'Death by lack of known personality.');
      }else{
  
  	// Let's get term information by search, start by making sure
  	// we're in the right category given our personality.
  	manager.add_query_filter('document_category', doc_cat);
  
  	// We're allowing at most one query right now.
  	if( ! us.isEmpty(queries) && queries.length === 1 ){
  	    manager.set_comfy_query(queries[0]);
  	}
  
  	// As many filters as we'd like though.
  	each( filters, function(filter){
  	    // Parse out our query filter.
  	    manager.add_query_filter_as_string(filter, ['$']);
  	});
  
  	// Use the light-weight payload for autocomplete.
  	if( lite_p === 'lite' || lite_p === true ){
  	    manager.lite(true);
  	}
  
  	// Failure callbacks.
  	manager.register('error', function(resp, man){
  	    envl.status('failure');
  	    envl.comments('Unable to process search: ' + srch_report);
  	    res.json(envl.structure());
  	});
  
  	// Success callback.
  	manager.register('search', function(resp, man){
  
  	    // See what we got.
  	    // Good response.
  	    if( resp.documents().length === 0 ){
  		envl.comments('Nothing found for: ' + srch_report);
  	    }else{
  		envl.comments('Results found for: ' + srch_report);
  	    }
  	    envl.data(resp.documents());
  
  	    res.json(envl.structure());
  	});
  	// Trigger async try.
  	manager.search();
      }
  }