<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def __get_query_basic(cls, date_field=None, start=None, end=None, filters={}):
 """ Create a es_dsl query object with the date range and filters. :param date_field: field with the date value :param start: date with the from value, should be a datetime.datetime object :param end: date with the to value, should be a datetime.datetime object :param filters: dict with the filters to be applied :return: a DSL query containing the required parameters Ex: {'query': {'bool': {'filter': [{'range': {'DATE_FIELD': {'gte': '2015-05-19T00:00:00', 'lte': '2018-05-18T00:00:00'}}}], 'must': [{'match_phrase': {'first_name': 'Jhon'}}, {'match_phrase': {'last_name': 'Doe'}}, {'match_phrase': {'Phone': 2222222}} ]}}} """

        query_basic = Search()

        query_filters = cls.__get_query_filters(filters)
        for f in query_filters:
            query_basic = query_basic.query(f)

        query_filters_inverse = cls.__get_query_filters(filters, inverse=True)
        # Here, don't forget the '~'. That is what makes this an inverse filter.
        for f in query_filters_inverse:
            query_basic = query_basic.query(~f)

        if not date_field:
            query_range = {}
        else:
            query_range = cls.__get_query_range(date_field, start, end)

        # Applying the range filter
        query_basic = query_basic.filter('range', **query_range)

        return query_basic