public SearchResult <Customer> GetCustomer(CustomerSearchRequest customerSearchRequest) { var filters = new List <Func <QueryContainerDescriptor <Customer>, QueryContainer> >(); if (customerSearchRequest.filters?.Count > 0) { foreach (Filter filter in customerSearchRequest.filters) { filters.Add(fq => fq.Term(t => t.Field(filter.fieldName).Value(filter.fieldValue))); } } AggregationBase agg = new TermsAggregation("school.suburb") { Field = Nest.Infer.Field <Customer>(p => p.school.suburb) } && new TermsAggregation("school.suburb") { Field = Nest.Infer.Field <Customer>(p => p.school.state) }; var response = EsCoreOperation.SearchClient.Search <Customer>(NewMethod2(customerSearchRequest, filters)); var fileter = new List <BrandLink.Extensions.ElasticSearch.Operations.Model.Request.Filter>(); foreach (Filter filter in customerSearchRequest.filters) { fileter.Add(new BrandLink.Extensions.ElasticSearch.Operations.Model.Request.Filter() { FieldName = filter.fieldName, FieldValue = filter.fieldValue }); } SearchParams searchRequest = new SearchParams() { SearchTerm = customerSearchRequest.searchTerm, Filters = fileter }; var responseNew = SearchConfiguration.CustomerSet.Query(searchRequest); var responseNew1 = SearchConfiguration.CustomerSet.Query(() => NewMethod3(customerSearchRequest, filters)); var searchResult = new SearchResult() { Total = response.Total, Page = customerSearchRequest.pageIndex, PageSize = customerSearchRequest.pageSize, Results = (List <Customer>)response.Documents }; searchResult.aggregations = BuildAggregations(response.Aggregations); return(responseNew); }
private static Func <SearchDescriptor <Customer>, ISearchRequest> NewMethod2(CustomerSearchRequest customerSearchRequest, List <Func <QueryContainerDescriptor <Customer>, QueryContainer> > filters) { return(s => s.Index("customer"). Query(q => q.Bool(b => b.Must(mu => mu.MultiMatch(m => m.Fields(f => NewMethod1(f)).Query(customerSearchRequest.searchTerm)) ).Filter(filters) ) ).Aggregations(a => NewMethod()).Skip(customerSearchRequest.pageIndex).Take(20)); }