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); }