code: def search(self, q, search_handler=None, **kwargs):
          
          params = {'q': q}
          params.update(kwargs)
          response = self._select(params, handler=search_handler)
          decoded = self.decoder.decode(response)
  
          self.log.debug(
              "Found '%s' search results.",
              # cover both cases: there is no response key or value is None
              (decoded.get('response', {}) or {}).get('numFound', 0)
          )
          return self.results_cls(decoded)
docs: 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,
              })