docs: function (parentBuilder, queryStr, matchWithinWords) {
      var regExps = SearchQueryBuilder.searchQueryToRegexps(queryStr, matchWithinWords);
  
      /**
       * Matches the given Regular expression with all the fields.
       * @param {Array.<string>} fields Array of document fields.
       * @param {boolean} [matchAnyRegex=false] If true, match any
       * of the search query tokens, else match all.
       * @returns {QueryBuilder} the parent Builder.
       * @private
       */
      function _matchAllFields(fields, matchAnyRegex) {
          var regExp = regExps ? matchAnyRegex ? regExps.any : regExps.all : null;
          if (regExp) {
              for (var i = 0; i < fields.length; ++i) {
                  parentBuilder.field(fields[i]).is("$regex", regExp);
              }
          }
          return parentBuilder;
      }
  
      /**
       * Matches the given Regular expression with at least one
       * of the fields.
       * @param {Array.<string>} fields Array of document fields.
       * @param {boolean} [matchAnyRegex=false] If true, match any
       * of the search query tokens, else match all.
       * @returns {QueryBuilder} the parent Builder.
       * @private
       */
      function _matchAnyField(fields, matchAnyRegex) {
          var regExp = regExps ? matchAnyRegex ? regExps.any : regExps.all : null;
          if (regExp) {
              var orBuilder = parentBuilder.either();
              for (var i = 0; i < fields.length; ++i) {
                  orBuilder = orBuilder.or().field(fields[i]).is("$regex", regExp);
              }
          }
          return parentBuilder;
      }
  
      /**
       * Add fields that are to be matched with all of the search tokens.
       * @param {...string} [field] One or more fields to be matched
       * with all tokens in the search query.
       * @returns {QueryBuilder} the parent Builder. Use {@link #andSearch}()
       * to chain further with this builder.
       */
      this.in = function (field) {
          return _matchAllFields(arguments, true);
      };
  
      /**
       * Add fields that are to be matched with any of the search tokens.
       * @param {...string} [field] One or more fields to be matched
       * with at least one of the tokens in the search query.
       * @returns {QueryBuilder} the parent Builder. Use {@link #andSearch}()
       * to chain further with this builder.
       */
      this.anyIn = function (field) {
          return _matchAllFields(arguments, false);
      };
  
      /**
       * Matches all of the tokens in at least one of the fields.
       * @param {...string} [field] One or more fields to be matched
       * with all of the tokens in the search query.
       * @returns {QueryBuilder} the parent Builder. Use {@link #andSearch}()
       * to chain further with this builder.
       */
      this.inAny = function (field) {
          return _matchAnyField(arguments, true);
      };
  
      /**
       * Matches at least one of the tokens in at least one of the fields.
       * @param {...string} [field] One or more fields to be matched
       * with at least one of the tokens in the search query.
       * @returns {QueryBuilder} the parent Builder. Use {@link #andSearch}()
       * to chain further with this builder.
       */
      this.anyInAny = function (field) {
          return _matchAnyField(arguments, false);
      }
  }