<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def search(self, dsl, params):
 """ Free queries to ES index. dsl (string):
 with DSL query params (list):
 [(key, value), (key, value)] where key is a query parameter, and value is the value required for parameter, ex: [('size', '0'), ('search_type', 'count')] """


        query_parameters = []
        for key, value in params:
            query_parameters.append(self.CITEDBY_THRIFT.kwargs(str(key), str(value)))

        try:
            result = self.client.search(dsl, query_parameters)
        except self.CITEDBY_THRIFT.ServerError:
            raise ServerError('you may trying to run a bad DSL Query')

        try:
            return json.loads(result)
        except:
            return None