Exemplo n.º 1
0
        /// <summary>
        /// 商品关键字搜索自动完成功能
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public static ProductACSearchResult GetProductACSearchResultBySolr(string keywordPrefix)
        {
            SearchCondition condition = new SearchCondition()
            {
                KeyWord = keywordPrefix
            };
            ProductACSearchResult result = SearchEngineManager.Query <ProductACSearchResult>(condition);

            return(result);
        }
Exemplo n.º 2
0
        public static ProductSearchResult GetProductSearchResultBySolr(ProductSearchCondition condition)
        {
            ProductSearchResult result = new ProductSearchResult();

            //商品聚合显示
            //condition.IsGroupQuery = true;

            #region  第一次搜索(初始化左导航,需要排除条件endecaId)
            //第一次搜索(初始化左导航,需要排除条件endecaId)
            ProductSearchCondition initialCondition = new ProductSearchCondition()
            {
                PagingInfo    = condition.PagingInfo,
                KeyWord       = condition.KeyWord,
                WithInKeyWord = condition.WithInKeyWord,
                Filters       = condition.Filters,
                IsGroupQuery  = condition.IsGroupQuery
            };
            if (condition.NValueList != null && condition.NValueList.Count > 0)
            {
                initialCondition.Filters = initialCondition.Filters == null ? new List <FilterBase>(0) : initialCondition.Filters;
                foreach (string item in condition.NValueList)
                {
                    if (!condition.Filters.Exists(x =>
                    {
                        if (x is FieldFilter)
                        {
                            return(((FieldFilter)x).Value.Equals(item, StringComparison.CurrentCultureIgnoreCase));
                        }
                        return(false);
                    }) && !string.Equals(item, condition.EndecaId))
                    {
                        initialCondition.Filters.Add(new FieldFilter("Nvalue", item));
                    }
                }
            }

            ProductSearchResult initialResult = SearchEngineManager.Query <ProductSearchResult>(initialCondition);
            result.Navigation = initialResult.Navigation;
            #endregion

            #region  第二次搜索(初始化过滤条件,需要排除N值)
            //第二次搜索(初始化过滤条件,需要排除N值)
            ProductSearchCondition filterCondition = new ProductSearchCondition()
            {
                PagingInfo    = condition.PagingInfo,
                KeyWord       = condition.KeyWord,
                WithInKeyWord = condition.WithInKeyWord,
                Filters       = condition.Filters == null ? new List <FilterBase>(0) : /*是否有折扣不影响条件选择区*/
                                condition.Filters.Where(x => x.Field != "Nvalue" && x.Field != "p_cashrebate").ToList(),
                IsGroupQuery = condition.IsGroupQuery
            };
            if (condition.NValueList != null && condition.NValueList.Count > 0)
            {
                filterCondition.Filters = filterCondition.Filters == null ? new List <FilterBase>(0) : filterCondition.Filters;
                foreach (string item in condition.NValueList)
                {
                    List <string> NValue = GetNValueList(condition.NFilter);
                    if (NValue != null && NValue.Count > 0)
                    {
                        if (!NValue.Contains(item))
                        {
                            filterCondition.Filters.Add(new FieldFilter("Nvalue", item));
                        }
                    }
                    else
                    {
                        filterCondition.Filters.Add(new FieldFilter("Nvalue", item));
                    }
                }
            }
            ProductSearchResult filterResult = SearchEngineManager.Query <ProductSearchResult>(filterCondition);
            result.FilterNavigation = filterResult.Navigation;
            #endregion

            #region 第三次搜索(搜商品,加上所有搜索条件)

            //第三次搜索(搜商品,加上所有搜索条件)
            if (condition.NValueList != null && condition.NValueList.Count > 0)
            {
                condition.Filters = condition.Filters == null ? new List <FilterBase>(0) : condition.Filters;
                foreach (string item in condition.NValueList)
                {
                    if (!condition.Filters.Exists(x =>
                    {
                        if (x is FieldFilter)
                        {
                            return(((FieldFilter)x).Value.Equals(item, StringComparison.CurrentCultureIgnoreCase));
                        }
                        return(false);
                    }))
                    {
                        condition.Filters.Add(new FieldFilter("Nvalue", item));
                    }
                }
            }
            //商品二维码搜索条件
            if (!string.IsNullOrWhiteSpace(condition.Barcode))
            {
                if (!condition.Filters.Exists(x => x.Field.Equals("p_barcode", StringComparison.CurrentCultureIgnoreCase)))
                {
                    condition.Filters.Add(new FieldFilter("p_barcode", condition.Barcode));
                }
            }
            ProductSearchResult productResult = SearchEngineManager.Query <ProductSearchResult>(condition);
            result.ProductDataList = productResult.ProductDataList;
            #endregion

            return(result);
        }