code: def query(self, query, filters=None, columns=None, sort=None, start=0, rows=30):
          if not columns:
              columns = ["*", "score"]
          fields = {"q": query,
                   "json.nl" :"map",
                   "fl": ",".join(columns),
                   "start": str(start),
                   "rows": str(rows),
                   "wt": "json"}
          if len(self.endpoints) > 1:
              fields["shards"] = self._get_shards()
          if not filters is None:
              filter_list = []
              for filter_field, value in filters.items():
                  filter_list.append("%s:%s" % (filter_field, value))
              fields["fq"] = " AND ".join(filter_list)
          if not sort is None:
              fields["sort"] = ",".join(sort)
          assert self.default_endpoint in self.endpoints
          request_url = _get_url(self.endpoints[self.default_endpoint], "select")
          results = self._send_solr_query(request_url, fields)
          if not results:
              return None
          assert "responseHeader" in results
          if not results.get("responseHeader").get("status") == 0:
              logger.error("Server error while retrieving results: %s", results)
              return None
          assert "response" in results
          result_obj = self._parse_response(results)
          return result_obj