Exemple #1
0
        private Query CreateRangeQuery(IFieldMappingInfo mapping, QueryType queryType, LuceneQueryPredicateExpression lowerBoundExpression, LuceneQueryPredicateExpression upperBoundExpression)
        {
            var lowerRange = RangeType.Inclusive;
            var upperRange = (queryType == QueryType.LessThan || queryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;

            if (upperBoundExpression == null)
            {
                lowerRange = upperRange;
                upperRange = RangeType.Inclusive;
            }

            if (mapping.IsNumericField)
            {
                var lowerBound = lowerBoundExpression == null ? null : EvaluateExpression(lowerBoundExpression);
                var upperBound = upperBoundExpression == null ? null : EvaluateExpression(upperBoundExpression);
                return(NumericRangeUtils.CreateNumericRangeQuery(mapping.FieldName, (ValueType)lowerBound, (ValueType)upperBound, lowerRange, upperRange));
            }
            else
            {
                var minInclusive = lowerRange == RangeType.Inclusive;
                var maxInclusive = upperRange == RangeType.Inclusive;

                var lowerBound = lowerBoundExpression == null ? null : EvaluateExpressionToStringAndAnalyze(lowerBoundExpression, mapping);
                var upperBound = upperBoundExpression == null ? null : EvaluateExpressionToStringAndAnalyze(upperBoundExpression, mapping);
                return(new TermRangeQuery(mapping.FieldName, lowerBound, upperBound, minInclusive, maxInclusive));
            }
        }
Exemple #2
0
        private string GetPattern(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
        {
            var pattern = EvaluateExpressionToString(expression, mapping);

            switch (expression.QueryType)
            {
            case QueryType.Prefix:
                pattern += "*";
                break;

            case QueryType.Wildcard:
                pattern = "*" + pattern + "*";
                break;

            case QueryType.Suffix:
                pattern = "*" + pattern;
                break;
            }

            if (expression.Fuzzy.HasValue)
            {
                pattern += string.Format(
                    CultureInfo.InvariantCulture,
                    "~{0}",
                    expression.Fuzzy.Value);
            }

            return(pattern);
        }
 public Query Parse(IFieldMappingInfo mapping, string pattern)
 {
     var queryParser = new QueryParser(context.Version, mapping.FieldName, context.Analyzer);
     
     queryParser.AllowLeadingWildcard = true;
     queryParser.LowercaseExpandedTerms = !mapping.CaseSensitive;
     
     var query = queryParser.Parse(pattern);
     return query;
 }
Exemple #4
0
        private Query CreateRangeQuery(IFieldMappingInfo mapping, QueryType lowerQueryType, Expression lowerBoundExpression, QueryType upperQueryType, Expression upperBoundExpression)
        {
            var lowerBound = lowerBoundExpression == null ? null : EvaluateExpression(lowerBoundExpression);
            var upperBound = upperBoundExpression == null ? null : EvaluateExpression(upperBoundExpression);

            var lowerRange = (lowerQueryType == QueryType.LessThan || lowerQueryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;
            var upperRange = (upperQueryType == QueryType.LessThan || upperQueryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;

            return(mapping.CreateRangeQuery(lowerBound, upperBound, lowerRange, upperRange));
        }
Exemple #5
0
        private FieldComparatorSource GetCustomSort(IFieldMappingInfo fieldMappingInfo)
        {
            var propertyType = fieldMappingInfo.PropertyInfo.PropertyType;

            if (typeof(IComparable).IsAssignableFrom(propertyType))
            {
                return(new ConvertableFieldComparatorSource(propertyType, fieldMappingInfo.Converter));
            }

            throw new NotSupportedException("Unsupported sort field type (does not implement IComparable): " + propertyType);
        }
Exemple #6
0
        public Query Parse(IFieldMappingInfo mapping, string pattern)
        {
            var queryParser = new QueryParser(context.Version, mapping.FieldName, context.Analyzer);

            queryParser.AllowLeadingWildcard   = true;
            queryParser.LowercaseExpandedTerms = !mapping.CaseSensitive;

            var query = queryParser.Parse(pattern);

            return(query);
        }
Exemple #7
0
        private object GetFieldValue(IFieldMappingInfo fieldMapper, Document document)
        {
            var fieldConverter = fieldMapper as IDocumentFieldConverter;

            if (fieldConverter == null)
            {
                throw new NotSupportedException(
                          string.Format("The field mapping of type {0} for field {1} must implement {2}.",
                                        fieldMapper.GetType(), fieldMapper.FieldName, typeof(IDocumentFieldConverter)));
            }

            return(fieldConverter.GetFieldValue(document));
        }
Exemple #8
0
        public void SetUp()
        {
            mappingInfo = MockRepository.GenerateStub <IFieldMappingInfoProvider>();

            transformer = new QueryModelTranslator(new Context(new RAMDirectory(), new WhitespaceAnalyzer(), Version.LUCENE_29, null, new object()), mappingInfo);

            numericMappingInfo = MockRepository.GenerateStub <IFieldMappingInfo>();
            numericMappingInfo.Stub(i => i.IsNumericField).Return(true);
            numericMappingInfo.Stub(i => i.SortFieldType).Return(SortField.LONG);

            nonNumericMappingInfo = MockRepository.GenerateStub <IFieldMappingInfo>();
            nonNumericMappingInfo.Stub(i => i.IsNumericField).Return(false);
            nonNumericMappingInfo.Stub(i => i.SortFieldType).Return(SortField.STRING);
        }
        public void SetUp()
        {
            mappingInfo = MockRepository.GenerateStub<IFieldMappingInfoProvider>();

            transformer = new QueryModelTranslator(new Context(new RAMDirectory(), new WhitespaceAnalyzer(), Version.LUCENE_29, null, new object()), mappingInfo);

            numericMappingInfo = MockRepository.GenerateStub<IFieldMappingInfo>();
            numericMappingInfo.Stub(i => i.IsNumericField).Return(true);
            numericMappingInfo.Stub(i => i.SortFieldType).Return(SortField.LONG);
            
            nonNumericMappingInfo = MockRepository.GenerateStub<IFieldMappingInfo>();
            nonNumericMappingInfo.Stub(i => i.IsNumericField).Return(false);
            nonNumericMappingInfo.Stub(i => i.SortFieldType).Return(SortField.STRING);
        }
Exemple #10
0
        private Query CreateRangeQuery(IFieldMappingInfo mapping, QueryType queryType, LuceneQueryPredicateExpression lowerBoundExpression, LuceneQueryPredicateExpression upperBoundExpression)
        {
            var lowerBound = lowerBoundExpression == null ? null : EvaluateExpression(lowerBoundExpression);
            var upperBound = upperBoundExpression == null ? null : EvaluateExpression(upperBoundExpression);

            var lowerRange = RangeType.Inclusive;
            var upperRange = (queryType == QueryType.LessThan || queryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;

            if (upperBoundExpression == null)
            {
                lowerRange = upperRange;
                upperRange = RangeType.Inclusive;
            }

            return(mapping.CreateRangeQuery(lowerBound, upperBound, lowerRange, upperRange));
        }
        private string GetPattern(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
        {
            var pattern = EvaluateExpressionToString(expression, mapping);

            switch (expression.QueryType)
            {
            case QueryType.Prefix:
                pattern += "*";
                break;

            case QueryType.Wildcard:
                pattern = "*" + pattern + "*";
                break;

            case QueryType.Suffix:
                pattern = "*" + pattern;
                break;
            }
            return(pattern);
        }
Exemple #12
0
        private string EvaluateExpressionToString(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
        {
            var result = EvaluateExpression(expression);

            var str = mapping == null?result.ToString() : mapping.ConvertToQueryExpression(result);

            if (expression.AllowSpecialCharacters)
            {
                return(str);
            }

            return(mapping != null?mapping.EscapeSpecialCharacters(str) : str);
        }
        private string EvaluateExpressionToString(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
        {
            var result = EvaluateExpression(expression);
            
            var str = mapping == null ? result.ToString() : mapping.ConvertToQueryExpression(result);

            if (expression.AllowSpecialCharacters)
                return str;

            return mapping != null ? mapping.EscapeSpecialCharacters(str) : str;
        }
        private string GetPattern(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
        {
            var pattern = EvaluateExpressionToString(expression, mapping);

            switch (expression.QueryType)
            {
                case QueryType.Prefix:
                    pattern += "*";
                    break;
                case QueryType.Wildcard:
                    pattern = "*" + pattern + "*";
                    break;
                case QueryType.Suffix:
                    pattern = "*" + pattern;
                    break;
            }
            return pattern;
        }
        private Query CreateRangeQuery(IFieldMappingInfo mapping, QueryType queryType, LuceneQueryPredicateExpression lowerBoundExpression, LuceneQueryPredicateExpression upperBoundExpression)
        {
            var lowerBound = lowerBoundExpression == null ? null : EvaluateExpression(lowerBoundExpression);
            var upperBound = upperBoundExpression == null ? null : EvaluateExpression(upperBoundExpression);

            var lowerRange = RangeType.Inclusive;
            var upperRange = (queryType == QueryType.LessThan || queryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;

            if (upperBoundExpression == null)
            {
                lowerRange = upperRange;
                upperRange = RangeType.Inclusive;
            }

            return mapping.CreateRangeQuery(lowerBound, upperBound, lowerRange, upperRange);
        }
        private Query CreateRangeQuery(IFieldMappingInfo mapping, QueryType lowerQueryType, Expression lowerBoundExpression, QueryType upperQueryType, Expression upperBoundExpression)
        {
            var lowerBound = lowerBoundExpression == null ? null : EvaluateExpression(lowerBoundExpression);
            var upperBound = upperBoundExpression == null ? null : EvaluateExpression(upperBoundExpression);

            var lowerRange = (lowerQueryType == QueryType.LessThan || lowerQueryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;
            var upperRange = (upperQueryType == QueryType.LessThan || upperQueryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;

            return mapping.CreateRangeQuery(lowerBound, upperBound, lowerRange, upperRange);
        }
        private Query CreateRangeQuery(IFieldMappingInfo mapping, QueryType queryType, LuceneQueryPredicateExpression lowerBoundExpression, LuceneQueryPredicateExpression upperBoundExpression)
        {
            var lowerRange = RangeType.Inclusive;
            var upperRange = (queryType == QueryType.LessThan || queryType == QueryType.GreaterThan) ? RangeType.Exclusive : RangeType.Inclusive;

            if (upperBoundExpression == null)
            {
                lowerRange = upperRange;
                upperRange = RangeType.Inclusive;
            }

            if (mapping.IsNumericField)
            {
                var lowerBound = lowerBoundExpression == null ? null : EvaluateExpression(lowerBoundExpression);
                var upperBound = upperBoundExpression == null ? null : EvaluateExpression(upperBoundExpression);
                return NumericRangeUtils.CreateNumericRangeQuery(mapping.FieldName, (ValueType)lowerBound, (ValueType)upperBound, lowerRange, upperRange);
            }
            else
            {
                var minInclusive = lowerRange == RangeType.Inclusive;
                var maxInclusive = upperRange == RangeType.Inclusive;

                var lowerBound = lowerBoundExpression == null ? null : EvaluateExpressionToStringAndAnalyze(lowerBoundExpression, mapping);
                var upperBound = upperBoundExpression == null ? null : EvaluateExpressionToStringAndAnalyze(upperBoundExpression, mapping);
                return new TermRangeQuery(mapping.FieldName, lowerBound, upperBound, minInclusive, maxInclusive);
            }
        }
        private string GetPattern(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
        {
            var pattern = EvaluateExpressionToString(expression, mapping);

            switch (expression.QueryType)
            {
                case QueryType.Prefix:
                    pattern += "*";
                    break;
                case QueryType.Wildcard:
                    pattern = "*" + pattern + "*";
                    break;
                case QueryType.Suffix:
                    pattern = "*" + pattern;
                    break;
            }

            if (expression.Fuzzy.HasValue)
            {
                pattern += string.Format(
                    CultureInfo.InvariantCulture,
                    "~{0}",
                    expression.Fuzzy.Value);
            }

            return pattern;
        }
Exemple #19
0
 private string EvaluateExpressionToStringAndAnalyze(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
 {
     return(context.Analyzer.Analyze(mapping.FieldName, EvaluateExpressionToString(expression, mapping)));
 }
 private string EvaluateExpressionToStringAndAnalyze(LuceneQueryPredicateExpression expression, IFieldMappingInfo mapping)
 {
     return context.Analyzer.Analyze(mapping.FieldName, EvaluateExpressionToString(expression, mapping));
 }