コード例 #1
0
        public void AddSort(Expression expression, OrderingDirection direction)
        {
            if (expression is LuceneOrderByRelevanceExpression)
            {
                if (direction == OrderingDirection.Desc)
                {
                    sorts.Add(new SortField(SortField.FIELD_SCORE.Field, SortField.FIELD_SCORE.Type, true));
                }
                else
                {
                    sorts.Add(SortField.FIELD_SCORE);
                }

                return;
            }

            var    reverse = direction == OrderingDirection.Desc;
            string propertyName;

            if (expression is LuceneQueryFieldExpression)
            {
                var field = (LuceneQueryFieldExpression)expression;
                propertyName = field.FieldName;
            }
            else
            {
                var selector = (MemberExpression)expression;
                propertyName = selector.Member.Name;
            }

            var mapping = fieldMappingInfoProvider.GetMappingInfo(propertyName);

            sorts.Add(mapping.CreateSortField(reverse));
        }
コード例 #2
0
        protected override Expression VisitLuceneQueryPredicateExpression(LuceneQueryPredicateExpression expression)
        {
            if (expression.QueryField is LuceneQueryAnyFieldExpression)
            {
                AddMultiFieldQuery(expression);

                return(base.VisitLuceneQueryPredicateExpression(expression));
            }

            var mapping = fieldMappingInfoProvider.GetMappingInfo(expression.QueryField.FieldName);

            var pattern = GetPattern(expression, mapping);

            var occur = expression.Occur;

            if (string.IsNullOrEmpty(pattern))
            {
                pattern = "*";
                occur   = Negate(occur);
            }

            Query query;

            if (expression.QueryType == QueryType.GreaterThan || expression.QueryType == QueryType.GreaterThanOrEqual)
            {
                query = CreateRangeQuery(mapping, expression.QueryType, expression.QueryPattern, QueryType.LessThanOrEqual, null);
            }
            else if (expression.QueryType == QueryType.LessThan || expression.QueryType == QueryType.LessThanOrEqual)
            {
                query = CreateRangeQuery(mapping, QueryType.GreaterThanOrEqual, null, expression.QueryType, expression.QueryPattern);
            }
            else
            {
                query = mapping.CreateQuery(pattern);
            }

            var booleanQuery = new BooleanQuery();

            query.Boost = expression.Boost;
            booleanQuery.Add(query, occur);

            queries.Push(booleanQuery);

            return(base.VisitLuceneQueryPredicateExpression(expression));
        }
コード例 #3
0
        private void CreateQueryFilterForKeyFields()
        {
            var filterQuery = fieldMappingInfoProvider.KeyProperties.Aggregate(
                new BooleanQuery(),
                (query, property) =>
            {
                var fieldMappingInfo = fieldMappingInfoProvider.GetMappingInfo(property);
                query.Add(fieldMappingInfo.CreateQuery("*"), Occur.MUST);
                return(query);
            });

            if (filterQuery.Clauses.Count > 0)
            {
                model.Filter = new QueryWrapperFilter(filterQuery);
            }
        }
コード例 #4
0
        public void AddSort(Expression expression, OrderingDirection direction)
        {
            if (expression is LuceneOrderByRelevanceExpression)
            {
                if (direction == OrderingDirection.Desc)
                {
                    sorts.Add(new SortField(SortField.FIELD_SCORE.Field, SortField.FIELD_SCORE.Type, true));
                }
                else
                {
                    sorts.Add(SortField.FIELD_SCORE);
                }

                return;
            }

            var    reverse = direction == OrderingDirection.Desc;
            string propertyName;

            if (expression is UnaryExpression)
            {
                var selector = (UnaryExpression)expression;
                expression = selector.Operand;
            }

            if (expression is LuceneQueryFieldExpression)
            {
                var field = (LuceneQueryFieldExpression)expression;
                propertyName = field.FieldName;
            }
            else if (expression is MemberExpression)
            {
                var selector = (MemberExpression)expression;
                propertyName = selector.Member.Name;
            }
            else
            {
                throw new ArgumentException("Unsupported sort expression type " + expression.GetType());
            }

            var mapping = fieldMappingInfoProvider.GetMappingInfo(propertyName);

            sorts.Add(mapping.CreateSortField(reverse));
        }