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)); }
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)); }
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); } }
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)); }