ElasticTranslateResult Translate(Expression e)
        {
            var evaluated  = PartialEvaluator.Evaluate(e);
            var aggregated = FacetExpressionVisitor.Rebind(Mapping, SourceType, evaluated);

            if (aggregated.Collected.Count > 0)
            {
                CompleteFacetTranslation(aggregated);
            }
            else
            {
                CompleteHitTranslation(evaluated);
            }

            searchRequest.Query  = QueryCriteriaRewriter.Compensate(searchRequest.Query);
            searchRequest.Filter = ConstantCriteriaFilterReducer.Reduce(searchRequest.Filter);
            ApplyTypeSelectionCriteria();

            return(new ElasticTranslateResult(searchRequest, materializer));
        }