docs: def bool(cls, must=None, should=None, must_not=None, minimum_number_should_match=None, boost=None):
          '''
          http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html
          A query that matches documents matching boolean combinations of other queris. The bool query maps to Lucene BooleanQuery. It is built using one of more boolean clauses, each clause with a typed occurrence. The occurrence types are:
          'must' - The clause(query) must appear in matching documents.
          'should' - The clause(query) should appear in the matching document. A boolean query with no 'must' clauses, one or more 'should' clauses must match a document. The minimum number of 'should' clauses to match can be set using 'minimum_number_should_match' parameter.
          'must_not' - The clause(query) must not appear in the matching documents. Note that it is not possible to search on documents that only consists of a 'must_not' clause(s).
  
          'minimum_number_should_match' - Minimum number of documents that should match
          'boost' - boost value
          > term = ElasticQuery()
          > term.term(user='kimchy')
          > query = ElasticQuery()
          > query.bool(should=term)
          > query.query()
            { 'bool' : { 'should' : { 'term' : {'user':'kimchy'}}}}
  
  
          '''
          instance = cls(bool={})
          if must is not None:
              instance['bool']['must'] = must
          if should is not None:
              instance['bool']['should'] = should
          if must_not is not None:
              instance['bool']['must_not'] = must_not
          if minimum_number_should_match is not None:
              instance['bool']['minimum_number_should_match'] = minimum_number_should_match
          if boost is not None:
              instance['bool']['boost'] = boost
  
          return instance