public async Task CanUseAliasMapForTopLevelAliasAsync() {
     var parser = new LuceneQueryParser();
     var result = await parser.ParseAsync("field1:value");
     var aliasMap = new FieldMap { { "field1", "field2" } };
     var aliased = await FieldResolverQueryVisitor.RunAsync(result, aliasMap);
     Assert.Equal("field2:value", aliased.ToString());
 }
        public async Task CanUseResolverAsync()
        {
            var parser = new LuceneQueryParser();
            var result = await parser.ParseAsync("field1.nested:value");

            var aliased = await FieldResolverQueryVisitor.RunAsync(result, f => f == "field1.nested"? "field2.nested" : null);

            Assert.Equal("field2.nested:value", aliased.ToString());
        }
 public async Task AliasMapShouldBeAppliedToAllLevels8Async() {
     var parser = new LuceneQueryParser();
     var result = await parser.ParseAsync("field1.nested.childproperty:value");
     var aliasMap = new FieldMap {
         { "field1.nested.childproperty", "field2.other.childproperty" }
     };
     var aliased = await FieldResolverQueryVisitor.RunAsync(result, aliasMap);
     Assert.Equal("field2.other.childproperty:value", aliased.ToString());
 }
 public async Task CanApplyRootLevelAliasMapOnNestedTermAsync() {
     var parser = new LuceneQueryParser();
     var result = await parser.ParseAsync("field1.nested.morenested:value");
     var aliasMap = new FieldMap {
         { "field1.nested.morenested", "field2.nested.morenested" }
     };
     var aliased = await FieldResolverQueryVisitor.RunAsync(result, aliasMap);
     Assert.Equal("field2.nested.morenested:value", aliased.ToString());
 }
 public async Task AliasMapShouldAllowDeepAliasesAsync() {
     var parser = new LuceneQueryParser();
     var result = await parser.ParseAsync("level1.level2.level3.level4:value");
     var aliasMap = new FieldMap {
         { "level1.level2.level3.level4", "alias1.alias2.level3.level4" }
     };
     var aliased = await FieldResolverQueryVisitor.RunAsync(result, aliasMap);
     Assert.Equal("alias1.alias2.level3.level4:value", aliased.ToString());
 }
 public async Task AliasMapShouldBeAppliedToAllLevels2Async() {
     var parser = new LuceneQueryParser();
     var result = await parser.ParseAsync("(field1.nested:value field1.another:blah)");
     var aliasMap = new FieldMap {
         { "field1.nested", "field2.other" }
     };
     var aliased = await FieldResolverQueryVisitor.RunAsync(result, aliasMap);
     Assert.Equal("(field2.other:value field1.another:blah)", aliased.ToString());
 }
 public async Task AliasMapShouldWorkOnGroupsAsync() {
     var parser = new LuceneQueryParser();
     var result = await parser.ParseAsync("(field1.nested:value OR field1.thing:yep) another:works");
     var aliasMap = new FieldMap {
         { "field1.nested", "field2.other" },
         { "field1.thing", "field2.nice" }
     };
     var aliased = await FieldResolverQueryVisitor.RunAsync(result, aliasMap);
     Assert.Equal("(field2.other:value OR field2.nice:yep) another:works", aliased.ToString());
 }
Beispiel #8
0
        public Task BuildAsync <T>(QueryBuilderContext <T> ctx) where T : class, new()
        {
            string filter = ctx.Source.GetFilterExpression();
            string search = ctx.Source.GetSearchExpression();
            string sort   = ctx.Source.GetSortExpression();

            if (!String.IsNullOrEmpty(filter))
            {
                var result = _parser.Parse(filter);
                filter = GenerateQueryVisitor.Run(FieldResolverQueryVisitor.Run(result, _aliasMap, ctx), ctx);

                ctx.Filter &= new QueryStringQuery {
                    Query           = filter,
                    DefaultOperator = Operator.And,
                    AnalyzeWildcard = false
                };
            }

            if (!String.IsNullOrEmpty(search))
            {
                var result = _parser.Parse(search);
                search = GenerateQueryVisitor.Run(FieldResolverQueryVisitor.Run(result, _aliasMap, ctx), ctx);

                ctx.Query &= new QueryStringQuery {
                    Query           = search,
                    DefaultOperator = ctx.Source.GetSearchExpressionDefaultOperator() == SearchOperator.Or ? Operator.Or : Operator.And,
                    AnalyzeWildcard = true
                };
            }

            if (!String.IsNullOrEmpty(sort))
            {
                var result = _parser.Parse(sort);
                TermToFieldVisitor.Run(result, ctx);
                FieldResolverQueryVisitor.Run(result, _aliasMap, ctx);
                var fields = GetReferencedFieldsQueryVisitor.Run(result);
                // TODO: Check referenced fields against opt.AllowedSortFields

                var sortFields = GetSortFieldsVisitor.Run(result, ctx).ToList();

                ctx.Search.Sort(sortFields);
            }

            return(Task.CompletedTask);
        }