protected virtual Expression VisitLuceneRangeQueryExpression(LuceneRangeQueryExpression expression)
        {
            var lower = VisitExpression(expression.Lower);
            var upper = VisitExpression(expression.Upper);
            var field = VisitExpression(expression.QueryField);

            if (ReferenceEquals(lower, expression.Lower) && ReferenceEquals(upper, expression.Upper)
                && ReferenceEquals(field, expression.QueryField))
            {
                return expression;
            }

            return new LuceneRangeQueryExpression((LuceneQueryFieldExpression) field,
                (LuceneQueryPredicateExpression)lower, expression.LowerQueryType,
                (LuceneQueryPredicateExpression)upper, expression.UpperQueryType);
        }
        protected override Expression VisitLuceneRangeQueryExpression(LuceneRangeQueryExpression expression)
        {
            var mapping = fieldMappingInfoProvider.GetMappingInfo(expression.QueryField.FieldName);

            var query = CreateRangeQuery(mapping, expression.LowerQueryType, expression.Lower, expression.UpperQueryType, expression.Upper);
            
            queries.Push(new BooleanQuery {{query, expression.Occur}});

            return base.VisitLuceneRangeQueryExpression(expression);
        }