'Performs a search and returns the results.
Requires a ``q`` for a string version of the query to run.
Optionally accepts ``**kwargs`` for additional options to be passed
through the Solr URL.
Returns ``self.results_cls`` class object (defaults to
``pysolr.Results``)
Usage::
# All docs.
results = solr.search(\'*:*\')
# Search with highlighting.
results = solr.search(\'ponies\', **{
\'hl\': \'true\',
\'hl.fragsize\': 10,'

def search(self, q, search_handler=None, **kwargs):

    params = {u'q': q}
    params.update(kwargs)
    response = self._select(params, handler=search_handler)
    decoded = self.decoder.decode(response)
    self.log.debug(u"Found    '%s'    search    results.", (decoded.get(u'response', {}) or {}).get(u'numFound', 0))
    return self.results_cls(decoded)
