@classmethod
def search(cls, query=None, filters=None, ordering=None):
    """performs a query using the model's `.search_objects` manager

        :param query: terms used to perform query
        :type query: str

        :param filters: key-value pairs used to build filters to limit search results
        :type filters: dict

        :param ordering: field names used to order the results
        :type ordering: list

        :return: elasticsearch search results mapped to django model proxies
        :rtype: django.db.models.QuerySet
        """
    qs = cls.search_objects.search()
    if query:
        qs = qs.query('match', _all=query)
    if filters:
        built_filters = cls._build_filters(filters)
        qs = qs.filter(built_filters)
    if ordering:
        ordering = cls._build_ordering(ordering)
        qs = qs.sort(*ordering)
    return qs
