text:   /**
      @class
      <p>The QueryFacet facet allows you to specify any valid <code>Query</code> and
      have the number of matching hits returned as the value.</p>
  
      <p>Facets are similar to SQL <code>GROUP BY</code> statements but perform much
         better. You can also construct several <em>"groups"</em> at once by simply
         specifying multiple facets.</p>
  
      <div class="alert-message block-message info">
          <p>
              <strong>Tip: </strong>
              For more information on faceted navigation, see
              <a href="http://en.wikipedia.org/wiki/Faceted_classification">this</a>
              Wikipedia article on Faceted Classification.
          </p>
      </div>
  
      @name ejs.QueryFacet
      @ejs facet
      @borrows ejs.FacetMixin.facetFilter as facetFilter
      @borrows ejs.FacetMixin.global as global
      @borrows ejs.FacetMixin.mode as mode
      @borrows ejs.FacetMixin.cacheFilter as cacheFilter
      @borrows ejs.FacetMixin.scope as scope
      @borrows ejs.FacetMixin.nested as nested
      @borrows ejs.FacetMixin._type as _type
      @borrows ejs.FacetMixin.toJSON as toJSON
  
      @desc
      <p>A facet that return a count of the hits matching the given query.</p>
  
      @param {String} name The name which be used to refer to this facet. For instance,
          the facet itself might utilize a field named <code>doc_authors</code>. Setting
          <code>name</code> to <code>Authors</code> would allow you to refer to the
          facet by that name, possibly simplifying some of the display logic.
  
      */
    ejs.QueryFacet = function (name) {
  
      let _common = ejs.FacetMixin(name), facet = _common.toJSON();
  
      return extend(_common, {
  
        /**
              <p>Sets the query to be used for this facet.</p>
  
              @member ejs.QueryFacet
              @param {Object} oQuery A valid <code>Query</code> object.
              @returns {Object} returns <code>this</code> so that calls can be chained.
              */
        query: function (oQuery) {
          if (oQuery == null) {
            return facet[name].query;
          }
        
          if (!isQuery(oQuery)) {
            throw new TypeError('Argument must be a Query');
          }
          
          facet[name].query = oQuery.toJSON();
          return this;
        }
        
      });
    };
  