code: protected String createFunctionFragment(Function function, int level, @Nullable Class<?> domainType) {
  
  		StringBuilder sb = new StringBuilder();
  		if (level <= 0) {
  			sb.append("{!func}");
  		}
  
  		sb.append(function.getOperation());
  		sb.append('(');
  		if (function.hasArguments()) {
  			List<String> solrReadableArguments = new ArrayList<>();
  			for (Object arg : function.getArguments()) {
  				Assert.notNull(arg, "Unable to parse 'null' within function arguments.");
  				if (arg instanceof Function) {
  					solrReadableArguments.add(createFunctionFragment((Function) arg, level + 1, domainType));
  				} else if (arg instanceof Criteria) {
  					solrReadableArguments.add(createQueryStringFromNode((Criteria) arg, domainType));
  				} else if (arg instanceof Field) {
  					solrReadableArguments.add(getMappedFieldName((Field) arg, domainType));
  				} else if (arg instanceof Query) {
  					solrReadableArguments.add(getQueryString((Query) arg, domainType));
  				} else if (arg instanceof String || !conversionService.canConvert(arg.getClass(), String.class)) {
  					solrReadableArguments.add(arg.toString());
  				} else {
  					solrReadableArguments.add(conversionService.convert(arg, String.class));
  				}
  			}
  			sb.append(StringUtils.join(solrReadableArguments, ','));
  		}
  		sb.append(')');
  		return sb.toString();
  	}
docs: Create {@link SolrClient} readable String representation for {@link Function}
  
  @param function
  @return
  @since 1.1