コード例 #1
0
        public List<int> Get(Query searchQuery)
        {
            var indexSearcher = _productSearcher.IndexSearcher;
            var name = FieldDefinition.GetFieldName<ProductSearchCategoriesDefinition>();
            var valueCollector = new ValueCollector(indexSearcher, name);
            indexSearcher.Search(searchQuery, valueCollector);
            var categoryIds = valueCollector.Values[name].Select(s => Convert.ToInt32(s)).Distinct().ToList();

            if (!categoryIds.Any())
                return categoryIds;

            var mainQuery = new BooleanQuery();
            var idsQuery = new BooleanQuery();
            const string idFieldName = "id";
            foreach (var categoryId in categoryIds)
            {
                idsQuery.Add(new TermQuery(new Term(idFieldName, categoryId.ToString())), Occur.SHOULD);
            }
            mainQuery.Add(idsQuery, Occur.MUST);

            var publishedOn = FieldDefinition.GetFieldName<PublishedOnFieldDefinition>();
            mainQuery.Add(new TermRangeQuery(
                                           publishedOn, null,
                                           DateTools.DateToString(CurrentRequestData.Now, DateTools.Resolution.SECOND), false, true), Occur.MUST);
            var webpageSearcher = _indexSearcher.IndexSearcher;
            var webpageValueCollector = new ValueCollector(webpageSearcher, idFieldName);
            webpageSearcher.Search(mainQuery, null, webpageValueCollector);

            return webpageValueCollector.Values[idFieldName].Select(s => Convert.ToInt32(s))
                .Intersect(categoryIds)
                .ToList();
        }
コード例 #2
0
 public List<OptionInfo> GetOptions(ProductSearchQuery query)
 {
     var clone = query.Clone() as ProductSearchQuery;
     IndexSearcher indexSearcher = _productSearcher.IndexSearcher;
     var valueCollector = new ValueCollector(indexSearcher,
         FieldDefinition.GetFieldName<ProductSearchOptionsDefinition>());
     indexSearcher.Search(GetQuery(clone), valueCollector);
     return GetOptionInfo(valueCollector);
 }
コード例 #3
0
 private List <OptionInfo> GetOptionInfo(ValueCollector valueCollector)
 {
     return
         (valueCollector.Values[FieldDefinition.GetFieldName <ProductSearchOptionsDefinition>()].Select(
              GetOptionInfo)
          .Where(info => !info.Equals(default(OptionInfo)))
          .Distinct()
          .ToList());
 }
コード例 #4
0
        public OptionSearchData GetOptionSearchData(ProductSearchQuery query)
        {
            ValueCollector optionValueCollector = GetOptionValueCollector(query);

            return(new OptionSearchData
            {
                Options = GetOptionInfo(optionValueCollector),
                Specifications = GetSpecifications(optionValueCollector)
            });
        }
コード例 #5
0
        public List <OptionInfo> GetOptions(ProductSearchQuery query)
        {
            var           clone          = query.Clone() as ProductSearchQuery;
            IndexSearcher indexSearcher  = _productSearcher.IndexSearcher;
            var           valueCollector = new ValueCollector(indexSearcher,
                                                              FieldDefinition.GetFieldName <ProductSearchOptionsDefinition>());

            indexSearcher.Search(GetQuery(clone), valueCollector);
            return(GetOptionInfo(valueCollector));
        }
コード例 #6
0
        private ValueCollector GetOptionValueCollector(ProductSearchQuery query)
        {
            var clone = query.Clone() as ProductSearchQuery;
            //clone.Options = new List<string>();
            IndexSearcher indexSearcher  = _productSearcher.IndexSearcher;
            var           valueCollector = new ValueCollector(indexSearcher,
                                                              FieldDefinition.GetFieldName <ProductSearchSpecificationsDefinition>(),
                                                              FieldDefinition.GetFieldName <ProductSearchOptionsDefinition>());

            indexSearcher.Search(GetQuery(clone), valueCollector);
            return(valueCollector);
        }
コード例 #7
0
        public List <int> GetBrands(ProductSearchQuery query)
        {
            var clone = query.Clone() as ProductSearchQuery;

            clone.BrandId = null;
            IndexSearcher indexSearcher  = _productSearcher.IndexSearcher;
            string        name           = FieldDefinition.GetFieldName <ProductSearchBrandDefinition>();
            var           valueCollector = new ValueCollector(indexSearcher, name);

            indexSearcher.Search(GetQuery(clone), valueCollector);
            return
                (valueCollector.Values[name].Where(x => !string.IsNullOrEmpty(x))
                 .Select(s => Convert.ToInt32(s))
                 .Distinct()
                 .ToList());
        }
コード例 #8
0
        public List <int> Get(Query searchQuery)
        {
            var indexSearcher  = _productSearcher.IndexSearcher;
            var name           = FieldDefinition.GetFieldName <ProductSearchCategoriesDefinition>();
            var valueCollector = new ValueCollector(indexSearcher, name);

            indexSearcher.Search(searchQuery, valueCollector);
            var categoryIds = valueCollector.Values[name].Select(s => Convert.ToInt32(s)).Distinct().ToList();

            if (!categoryIds.Any())
            {
                return(categoryIds);
            }

            var          mainQuery   = new BooleanQuery();
            var          idsQuery    = new BooleanQuery();
            const string idFieldName = "id";

            foreach (var categoryId in categoryIds)
            {
                idsQuery.Add(new TermQuery(new Term(idFieldName, categoryId.ToString())), Occur.SHOULD);
            }
            mainQuery.Add(idsQuery, Occur.MUST);

            var publishedOn = FieldDefinition.GetFieldName <PublishedOnFieldDefinition>();

            mainQuery.Add(new TermRangeQuery(
                              publishedOn, null,
                              DateTools.DateToString(CurrentRequestData.Now, DateTools.Resolution.SECOND), false, true), Occur.MUST);
            var webpageSearcher       = _indexSearcher.IndexSearcher;
            var webpageValueCollector = new ValueCollector(webpageSearcher, idFieldName);

            webpageSearcher.Search(mainQuery, null, webpageValueCollector);

            return(webpageValueCollector.Values[idFieldName].Select(s => Convert.ToInt32(s))
                   .Intersect(categoryIds)
                   .ToList());
        }
コード例 #9
0
 public List<int> GetBrands(ProductSearchQuery query)
 {
     var clone = query.Clone() as ProductSearchQuery;
     clone.BrandId = null;
     IndexSearcher indexSearcher = _productSearcher.IndexSearcher;
     string name = FieldDefinition.GetFieldName<ProductSearchBrandDefinition>();
     var valueCollector = new ValueCollector(indexSearcher, name);
     indexSearcher.Search(GetQuery(clone), valueCollector);
     return
         valueCollector.Values[name].Where(x => !string.IsNullOrEmpty(x))
             .Select(s => Convert.ToInt32(s))
             .Distinct()
             .ToList();
 }
コード例 #10
0
 private ValueCollector GetOptionValueCollector(ProductSearchQuery query)
 {
     var clone = query.Clone() as ProductSearchQuery;
     //clone.Options = new List<string>();
     IndexSearcher indexSearcher = _productSearcher.IndexSearcher;
     var valueCollector = new ValueCollector(indexSearcher,
         FieldDefinition.GetFieldName<ProductSearchSpecificationsDefinition>(),
         FieldDefinition.GetFieldName<ProductSearchOptionsDefinition>());
     indexSearcher.Search(GetQuery(clone), valueCollector);
     return valueCollector;
 }
コード例 #11
0
 private List<OptionInfo> GetOptionInfo(ValueCollector valueCollector)
 {
     return
         valueCollector.Values[FieldDefinition.GetFieldName<ProductSearchOptionsDefinition>()].Select(
             GetOptionInfo)
             .Where(info => !info.Equals(default(OptionInfo)))
             .Distinct()
             .ToList();
 }
コード例 #12
0
 private static List<int> GetSpecifications(ValueCollector valueCollector)
 {
     return
         valueCollector.Values[FieldDefinition.GetFieldName<ProductSearchSpecificationsDefinition>()].Select(
             s => Convert.ToInt32(s)).Distinct().ToList();
 }
コード例 #13
0
 private static List <int> GetSpecifications(ValueCollector valueCollector)
 {
     return
         (valueCollector.Values[FieldDefinition.GetFieldName <ProductSearchSpecificationsDefinition>()].Select(
              s => Convert.ToInt32(s)).Distinct().ToList());
 }