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);
 }
 public double GetMaxPrice(ProductSearchQuery query)
 {
     var clone = query.Clone() as ProductSearchQuery;
     clone.PriceTo = null;
     TopDocs search = _productSearcher.IndexSearcher.Search(GetQuery(clone), int.MaxValue);
     List<Document> documents =
         search.ScoreDocs.Select(doc => _productSearcher.IndexSearcher.Doc(doc.Doc)).ToList();
     decimal max = documents.Count > 0
         ? documents.Select(
             document => document.GetValue<decimal>(FieldDefinition.GetFieldName<ProductSearchPriceDefinition>()))
             .Max()
         : 0;
     if (documents.Any())
         max =
             documents.Select(
                 document =>
                     document.GetValue<decimal>(FieldDefinition.GetFieldName<ProductSearchPriceDefinition>()))
                 .Max();
     return Convert.ToDouble(Math.Ceiling(max / 5.0m) * 5m);
 }
 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();
 }
 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;
 }
 public List<int> GetCategories(ProductSearchQuery query)
 {
     var clone = query.Clone() as ProductSearchQuery;
     clone.CategoryId = null;
     Query searchQuery = GetQuery(clone);
     return _getProductCategories.Get(searchQuery);
 }