コード例 #1
0
        public void AddProduct()
        {
            var service = _container.Resolve <IRequestingProductService>();

            var request = new RequestIndexedProduct();

            request.Size = Int16.MaxValue;
            request.Filters.Add(new RequestBucketComposite
            {
                Key = "Processor",
                BucketTransformationType = Enums.BucketTransformationEnum.TermType
            });

            var response = service.RequestProductPaginated(request);
        }
コード例 #2
0
        public RequestIndexedProductResponse RequestProductPaginated(RequestIndexedProduct request)
        {
            Check.Require(request != null, "please provide a request");

            //var response = _elasticClient.Search<IndexedProduct>(x => x
            //    .Size(request.Size)
            //    .From(request.From)

            //    .Sort(s =>
            //    {
            //        switch (request.Sort.ToLowerInvariant())
            //        {
            //            case "priceasc":
            //                return s.OnField(xf => xf.Price)
            //                    .Ascending();

            //            case "pricedesc":
            //                return s.OnField(xf => xf.Price)
            //                    .Descending();

            //            case "titleasc":
            //                return s.OnField(xf => xf.ProductName)
            //                    .Ascending();

            //            case "titledesc":
            //                return s.OnField(xf => xf.ProductName)
            //                    .Descending();

            //            case "dateasc":
            //                return s.OnField(xf => xf.CreatedOn)
            //                    .Ascending();

            //            case "datedesc":
            //                return s.OnField(xf => xf.CreatedOn)
            //                    .Descending();

            //            default:
            //                return s.OnField(xf => xf.CreatedOn)
            //                    .Descending();
            //        }
            //    })

            //    .Query(q =>
            //    {
            //        if ((request.Filters == null || request.Filters.Count == 0)
            //            && request.Distance <= 0
            //            && request.FilterCategoryId <= 0
            //            && !request.UserId.HasValue
            //            && string.IsNullOrWhiteSpace(request.QuerySearch))
            //        {
            //            var cont1 = q.Term(t1 => t1
            //            .Value(ProductStatusTypeEnum.APPROVED)
            //            .OnField(f1 => f1.LastStatus));

            //            var cont1bis = q.Term(t1 => t1
            //            .Value(ProductStatusTypeEnum.PERMANENT)
            //            .OnField(f1 => f1.LastStatus));

            //            var cont2 = q.Term(t1 => t1
            //            .Value(request.IsDemand ? (int)ProductAnnounceTypeEnum.DEMAND : (int)ProductAnnounceTypeEnum.OFFER)
            //            .OnField(f1 => f1.ProductAnnounceTypeID));

            //            return cont2 && (cont1 || cont1bis);
            //        }

            //        QueryContainer mandatoryContraint = q.Term(t1 => t1
            //            .Value(ProductStatusTypeEnum.APPROVED)
            //            .OnField(f1 => f1.LastStatus));

            //        QueryContainer mandatoryContraint2 = q.Term(t1 => t1
            //            .Value(ProductStatusTypeEnum.PERMANENT)
            //            .OnField(f1 => f1.LastStatus));

            //        QueryContainer mandatoryTypeDemand = q.Term(t1 => t1
            //            .Value(request.IsDemand ? (int)ProductAnnounceTypeEnum.DEMAND : (int)ProductAnnounceTypeEnum.OFFER)
            //            .OnField(f1 => f1.ProductAnnounceTypeID));

            //        QueryContainer searchUserContainer = null;
            //        if (request.UserId.HasValue)
            //        {
            //            searchUserContainer = q.Term(mm =>
            //            {
            //                mm.Value(request.UserId)
            //                    .OnField(mmf => mmf.UserId);
            //            });
            //        }

            //        QueryContainer searchQueryContainer = null;
            //        if (!string.IsNullOrWhiteSpace(request.QuerySearch))
            //        {
            //            searchQueryContainer = q.MultiMatch(mm =>
            //            {
            //                mm.Query(request.QuerySearch)
            //                    .OnFields(mmf => mmf.ProductName.Suffix("pn-french"),
            //                    //mmf => mmf.ProductName.Suffix("pn-pm"),
            //                    //mmf => mmf.ProductName.Suffix("pn-pmnp"),
            //                    mmf => mmf.ProductName.Suffix("pn-fm"),

            //                    mmf => mmf.ShortDescription.Suffix("sd-french"),
            //                    //mmf => mmf.ShortDescription.Suffix("sd-pm"),
            //                    //mmf => mmf.ShortDescription.Suffix("sd-pmnp"),
            //                    mmf => mmf.ShortDescription.Suffix("sd-fm"),

            //                    mmf => mmf.Description.Suffix("d-french"),
            //                    //mmf => mmf.Description.Suffix("d-pm"),
            //                    //mmf => mmf.Description.Suffix("d-pmnp"),
            //                    mmf => mmf.Description.Suffix("d-fm"));
            //            });
            //        }

            //        var res = q.Filtered(f1 => f1.Filter(f2 =>
            //        {
            //            var filterContainers = new List<FilterContainer>();
            //            var types = request.Filters;

            //            foreach (var type in types)
            //            {
            //                filterContainers.Add(f2.Terms("attributes.type", new[] { type.Key }));

            //                if (type.Childrens == null || type.Childrens.Count() == 0)
            //                    continue;

            //                var items = type.Childrens;

            //                switch (type.PrimitiveType)
            //                {
            //                    case ItemPrimitiveTypeEnum.String:
            //                        filterContainers.Add(f2.Terms("attributes.item", items.Select(localSelect => localSelect.Key).ToArray()));
            //                        break;

            //                    case ItemPrimitiveTypeEnum.Boolean:
            //                        var arBool = items.Select(localSelect => localSelect.BoolValue).ToArray();
            //                        var valBool = arBool.First();
            //                        filterContainers.Add(f2.Term(ff2 => ff2.Attributes.First().ItemBool, (object)valBool));
            //                        break;

            //                    case ItemPrimitiveTypeEnum.Number:
            //                        foreach (var requestBucketComposite in items)
            //                        {
            //                            filterContainers.Add(f2.Range(rnum => rnum
            //                                .OnField(rnumField => rnumField.Attributes.First().ItemNumber)
            //                                .GreaterOrEquals(requestBucketComposite.NumberMinRangeValue.HasValue ? (double?)Convert.ToDouble(requestBucketComposite.NumberMinRangeValue) : null)
            //                                .LowerOrEquals(requestBucketComposite.NumberMaxRangeValue.HasValue ? (double?)Convert.ToDouble(requestBucketComposite.NumberMaxRangeValue) : null)));
            //                        }
            //                        break;

            //                    case ItemPrimitiveTypeEnum.Date:
            //                        foreach (var requestBucketComposite in items)
            //                        {
            //                            filterContainers.Add(f2.Range(rnum => rnum
            //                                .OnField(rnumField => rnumField.Attributes.First().ItemDate)
            //                                .GreaterOrEquals(requestBucketComposite.DateMinRangeValue)
            //                                .LowerOrEquals(requestBucketComposite.DateMaxRangeValue)));
            //                        }
            //                        break;

            //                    default:
            //                        filterContainers.Add(f2.Terms("attributes.item", items.Select(localSelect => localSelect.Key).ToArray()));
            //                        break;
            //                }
            //            }

            //            if (request.Distance > 0)
            //            {
            //                filterContainers.Add(f2.GeoDistance(
            //                    "coordinate",
            //                    d => d.Distance(request.Distance, GeoUnit.Kilometers).Location(request.SourceLat, request.SourceLon)
            //                  ));
            //            }

            //            if (request.FilterCategoryId > 0)
            //            {
            //                var lstCatIds = new List<int>() { request.FilterCategoryId };
            //                filterContainers.Add(f2.Term<IList<int>>(f2t => f2t.CategoryIds, lstCatIds));
            //            }

            //            return f2.And(filterContainers.ToArray());

            //        }));

            //        var returnRes = res;

            //        returnRes = returnRes && mandatoryTypeDemand && (mandatoryContraint || mandatoryContraint2);

            //        if (searchQueryContainer != null)
            //            returnRes = returnRes && searchQueryContainer;

            //        if (searchUserContainer != null)
            //            returnRes = returnRes && searchUserContainer;

            //        return returnRes;
            //    })
            //    .Aggregations(a1 => a1
            //        .Nested("attributes", n1 => n1
            //            .Path(p1 => p1.Attributes)
            //            .Aggregations(x2 => x2
            //                .Terms("attribute_agg", t => t
            //                        .Size(Int32.MaxValue)
            //                        .Field("attributes.type")
            //                        .Aggregations(x3 => x3
            //                            .Terms("attribute_type_primitive_type_id",
            //                                st0 =>
            //                                    st0.Field("attributes.itemPrimitiveType")
            //                                        .Size(1))
            //                            .Filter("filter_attribute_item_agg_string", f1 =>
            //                                f1
            //                                .Filter(fc1 => fc1.Or(fc1.Terms(fta1 => fta1.Attributes.First().ItemPrimitiveType, new[] { ItemPrimitiveTypeEnum.String }),
            //                                                        fc1.Not(fcn1 => fc1.Exists((ftae1 => ftae1.Attributes.First().ItemPrimitiveType)))))
            //                                .Aggregations(fa1 =>
            //                                    fa1.Terms("attribute_item_agg_string", t2 => t2.Size(Int32.MaxValue)
            //                                        .Field("attributes.item")
            //                                        ))
            //                            )
            //                            .Filter("filter_attribute_item_agg_date", f2 =>
            //                                f2
            //                                .Filter(fc2 => fc2.Terms(fta2 => fta2.Attributes.First().ItemPrimitiveType, new[] { ItemPrimitiveTypeEnum.Date }))
            //                                .Aggregations(fa1 =>
            //                                    fa1.Terms("attribute_item_agg_date", t2 => t2.Size(Int32.MaxValue)
            //                                        .Field("attributes.itemDate")
            //                                        ))
            //                            )
            //                            .Filter("filter_attribute_item_agg_number", f3 =>
            //                                f3
            //                                .Filter(fc3 => fc3.Terms(fta3 => fta3.Attributes.First().ItemPrimitiveType, new[] { ItemPrimitiveTypeEnum.Number }))
            //                                .Aggregations(fa1 =>
            //                                    fa1.Terms("attribute_item_agg_number", t2 => t2.Size(Int32.MaxValue)
            //                                        .Field("attributes.itemNumber")
            //                                        )
            //                                        .Min("attribute_item_agg_number_min", min => min.Field(minField => minField.Attributes.First().ItemNumber))
            //                                        .Max("attribute_item_agg_number_max", max => max.Field(minField => minField.Attributes.First().ItemNumber)))
            //                            )
            //                            .Filter("filter_attribute_item_agg_bool", f4 =>
            //                                f4
            //                                .Filter(fc4 => fc4.Terms(fta4 => fta4.Attributes.First().ItemPrimitiveType, new[] { ItemPrimitiveTypeEnum.Boolean }))
            //                                .Aggregations(fa1 =>
            //                                    fa1.Terms("attribute_item_agg_bool", t2 => t2.Size(Int32.MaxValue)
            //                                        .Field("attributes.itemBool")
            //                                        ))
            //                            )
            //                            ))))));

            var returnResponse = new RequestIndexedProductResponse();

            returnResponse.QuerySearch = request.QuerySearch;
            //returnResponse.Total = response.Total;
            //returnResponse.ContextTotal = response.Documents.Count();

            //var lstDoc = response.Documents.ToList();
            //lstDoc.ForEach(x => EnrichIndexProduct(x));

            //returnResponse.ContextProducts = lstDoc;

            //returnResponse.TimeRequestElapsed = response.ElapsedMilliseconds;
            //var bucketTree = BuildAttributeTree(response.Aggs.Nested("attributes"), request.Filters);
            //returnResponse.BucketTree = bucketTree.Skip(request.FromBucketTree).Take(request.SizeBucketTree).ToList();
            //returnResponse.TotalBucketTree = bucketTree.Count();
            return(returnResponse);
        }