示例#1
0
        public PagedResponse<ProductDoc> SearchByKeyword(PagedRequest<ProductSearchRequest> request)
        {
            //QueryContainer filter = null;
            var matchFields = new string[] { "name^20", "description^5", "instruction" };
            //var categoryLevelMatch = request.Data.FilterCategoryLevel.HasValue ? request.Data.FilterCategoryLevel == 1 ? "categoryLevel1" : request.Data.FilterCategoryLevel == 2 ? "categoryLevel2" : "categoryLevel3" : "categoryLevel3";
            var categoryLevelMatch = "categoryLevel3";
            var query = new QueryBuilder()
                .AndMultiMatch(matchFields, request.Data.Keyword)
                .Build();

            var filterBuilder = new QueryBuilder();
            foreach (var c in request.Data.CategoryName)
            {
                filterBuilder = filterBuilder.OrMatch(categoryLevelMatch, request.Data.CategoryName);
            }
                
            foreach (var bname in request.Data.BrandName)
            {
                filterBuilder = filterBuilder.OrMatch("brandName", bname);
            }
            foreach (var t in request.Data.Tag)
            {
                filterBuilder = filterBuilder.OrMatch("tags", t);
            }
            var filter = filterBuilder.Build();
            //var query = new QueryBuilder()
            //    .OrMultiMatch(matchFields, request.Data.Keyword)
            //    //.AndMatch("brandName", request.Data.BrandName)
            //    .AndMatch(categoryLevelMatch, request.Data.CategoryName)
            //    .Build();
            AggregationContainerDescriptor<ProductDoc> categoryAgg = null;
            if (request.Data.NeedAggregation)
            {
                categoryAgg = new AggregationContainerDescriptor<ProductDoc>()
                .Terms("agg_brand", f => f.Field("brandName"))
                .Terms("agg_category_level_3", f => f.Field("categoryLevel3"))
                .Terms("agg_tag", f => f.Field("tags"));
            }            
            
            //switch (request.Data.FilterCategoryLevel)
            //{                
            //    case 1:
            //        categoryAgg.Terms("agg_category_level_1", f => f.Field("categoryLevel1"));
            //        break;
            //    case 2:
            //        categoryAgg.Terms("agg_category_level_2", f => f.Field("categoryLevel2"));
            //        break;
            //    default:
            //    case 3:
            //        categoryAgg.Terms("agg_category_level_3", f => f.Field("categoryLevel3"));
            //        break;
            //}
                
            var result = Client.SetPageNum(request.PageNumber).SetPageSize(request.PageSize).SearchResponse(query, filter, a => categoryAgg);
            return Client.WrapResult(result);
        }