/// <summary> /// Adds the facet queries. /// </summary> /// <param name="param">The param.</param> /// <param name="fieldName">Name of the field.</param> /// <param name="values">The values.</param> private void AddFacetQueries( Facets <ESDocument> param, string fieldName, IEnumerable <AttributeFilterValue> values, ISearchCriteria criteria) { if (values == null) { return; } var ffilter = new BoolFilter <ESDocument>(); foreach (var f in criteria.CurrentFilters) { if (!f.Key.Equals(fieldName)) { var q = ElasticQueryHelper.CreateQuery(criteria, f); ffilter.Must(ff => ff.Bool(bb => q)); } } var facetFilter = new FacetFilter <ESDocument>(); facetFilter.Bool(f => ffilter); //var filter = new FacetFilter<ESDocument>(); //facetFilter.Terms(x => x.Values(values.Select(y => y.Value).ToArray())); //var filterFacet = new FilterFacet<ESDocument>(); //filterFacet.FacetName(fieldName.ToLower()).FacetFilter(f => facetFilter); param.Terms(t => t.FacetName(fieldName.ToLower()).Field(fieldName.ToLower()).FacetFilter(ff => facetFilter)); }
public static BoolFilter<ESDocument> CreateQueryForValue(ISearchCriteria criteria, ISearchFilter filter, ISearchFilterValue value) { var query = new BoolFilter<ESDocument>(); var field = filter.Key.ToLower(); if (filter.GetType() == typeof(PriceRangeFilter)) { var tempQuery = CreatePriceRangeFilter(criteria, field, value as RangeFilterValue); if (tempQuery != null) { query.Must(q => q.Bool(b => tempQuery)); } } else { if (value.GetType() == typeof(AttributeFilterValue)) { query.Must(q => q.Term(t=>t.Field(field).Value(((AttributeFilterValue)value).Value))); } else if (value.GetType() == typeof(RangeFilterValue)) { var tempValue = value as RangeFilterValue; var tempFilter = new RangeFilter<ESDocument>(); tempFilter.Field(field).From(tempValue.Lower).To(tempValue.Upper).IncludeLower(true).IncludeUpper(false); query.Should(q => q.Range(r => tempFilter)); } } return query; }
private static BoolFilter<ESDocument> CreatePriceRangeFilter(string[] priceLists, int index, string field, string currency, string lowerbound, string upperbound, bool lowerboundincluded, bool upperboundincluded) { var query = new BoolFilter<ESDocument>(); // create left part var filter = new RangeFilter<ESDocument>(); filter.Field(String.Format("{0}_{1}_{2}", field, currency, priceLists[index - 1].ToLower()))/*.From("*").To("*")*/.IncludeLower(lowerboundincluded).IncludeUpper(upperboundincluded); //query.MustNot(q => q.ConstantScore(c => c.Filter(f => f.Range(r => filter)))); query.MustNot(q => q.Range(r => filter)); // create right part if (index == priceLists.Count() - 1) // last element { var filter2 = new RangeFilter<ESDocument>(); filter2.Field(String.Format("{0}_{1}_{2}", field, currency, priceLists[index].ToLower())).From(lowerbound).To(upperbound).IncludeLower(lowerboundincluded).IncludeUpper(upperboundincluded); //query.Must(q => q.ConstantScore(c => c.Filter(f => f.Range(r => filter2)))); query.Must(q => q.Range(r => filter2)); } else { query.Should(q => q.Bool(b => CreatePriceRangeFilter(priceLists, index + 1, field, currency, lowerbound, upperbound, lowerboundincluded, upperboundincluded))); } return query; }
private static BoolFilter <ESDocument> CreatePriceRangeFilter(string[] priceLists, int index, string field, string currency, string lowerbound, string upperbound, bool lowerboundincluded, bool upperboundincluded) { var query = new BoolFilter <ESDocument>(); // create left part var filter = new RangeFilter <ESDocument>(); filter.Field(String.Format("{0}_{1}_{2}", field, currency, priceLists[index - 1].ToLower())) /*.From("*").To("*")*/.IncludeLower(lowerboundincluded).IncludeUpper(upperboundincluded); //query.MustNot(q => q.ConstantScore(c => c.Filter(f => f.Range(r => filter)))); query.MustNot(q => q.Range(r => filter)); // create right part if (index == priceLists.Count() - 1) // last element { var filter2 = new RangeFilter <ESDocument>(); filter2.Field(String.Format("{0}_{1}_{2}", field, currency, priceLists[index].ToLower())).From(lowerbound).To(upperbound).IncludeLower(lowerboundincluded).IncludeUpper(upperboundincluded); //query.Must(q => q.ConstantScore(c => c.Filter(f => f.Range(r => filter2)))); query.Must(q => q.Range(r => filter2)); } else { query.Should(q => q.Bool(b => CreatePriceRangeFilter(priceLists, index + 1, field, currency, lowerbound, upperbound, lowerboundincluded, upperboundincluded))); } return(query); }
public static BoolFilter <ESDocument> CreateQueryForValue(ISearchCriteria criteria, ISearchFilter filter, ISearchFilterValue value) { var query = new BoolFilter <ESDocument>(); var field = filter.Key.ToLower(); if (filter.GetType() == typeof(PriceRangeFilter)) { var tempQuery = CreatePriceRangeFilter(criteria, field, value as RangeFilterValue); if (tempQuery != null) { query.Must(q => q.Bool(b => tempQuery)); } } else { if (value.GetType() == typeof(AttributeFilterValue)) { query.Must(q => q.Term(t => t.Field(field).Value(((AttributeFilterValue)value).Value))); } else if (value.GetType() == typeof(RangeFilterValue)) { var tempValue = value as RangeFilterValue; var tempFilter = new RangeFilter <ESDocument>(); tempFilter.Field(field).From(tempValue.Lower).To(tempValue.Upper).IncludeLower(true).IncludeUpper(false); query.Should(q => q.Range(r => tempFilter)); } } return(query); }
//добавление нового private BoolFilter AddBool() { bool val = fBool.Value; BoolFilter bf = new BoolFilter(_currentItem, val, _current); return(bf); }
public BoolFilterStrategy(BoolFilter filter, ComboBox conditionComboBox, TextBox valueTextBox, GroupBox filterGroupBox, DockPanel valueDockPanel) : base(conditionComboBox, valueTextBox, filterGroupBox, valueDockPanel) { this.Filter = filter; }
public void SerializerBoolFilter() { JsonSerializer jsonSerializer = new JsonSerializer(); BoolFilter boolFilter = new BoolFilter(); boolFilter.Must(new TermFilter("term1", "value1")); boolFilter.Should(new TermFilter("term2", "value2")); boolFilter.Should(new TermFilter("term3", "value3")); string jsonString = jsonSerializer.Serialize(boolFilter); Console.WriteLine(jsonString); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { BoolFilter boolFilter = (BoolFilter)value; if (boolFilter == null) { return; } /* * "bool" : { * "must" : {}, * "must_not" : {}, * "should" : [{},{}] * } */ writer.WriteStartObject(); writer.WritePropertyName("bool"); writer.WriteStartObject(); if (boolFilter.MustFilters != null && boolFilter.MustFilters.Count > 0) { writer.WritePropertyName("must"); writer.WriteStartArray(); foreach (var mustFilter in boolFilter.MustFilters) { serializer.Serialize(writer, mustFilter); } writer.WriteEndArray(); } if (boolFilter.MustNotFilter != null && boolFilter.MustNotFilter.Count > 0) { writer.WritePropertyName("must_not"); writer.WriteStartArray(); foreach (var mustNotFilter in boolFilter.MustNotFilter) { serializer.Serialize(writer, mustNotFilter); } writer.WriteEndArray(); } if (boolFilter.ShouldFilter != null && boolFilter.ShouldFilter.Count > 0) { writer.WritePropertyName("should"); writer.WriteStartArray(); foreach (var shouldFilter in boolFilter.ShouldFilter) { serializer.Serialize(writer, shouldFilter); } writer.WriteEndArray(); } writer.WriteEndObject(); writer.WriteEndObject(); }
public static BoolFilter<ESDocument> CreateQuery(ISearchCriteria criteria, ISearchFilter filter) { var values = GetFilterValues(filter); if (values == null) return null; var query = new BoolFilter<ESDocument>(); foreach (var value in values) { var valueQuery = CreateQueryForValue(criteria, filter, value); //var boolQuery = new Query<ESDocument>(); //boolQuery.Bool(x => valueQuery); query.Should(x=>x.Bool(y=>valueQuery)); } return query; }
/// <summary> /// Creates the price range filter. /// </summary> /// <param name="criteria">The criteria.</param> /// <param name="field">The field.</param> /// <param name="value">The value.</param> /// <returns></returns> public static BoolFilter <ESDocument> CreatePriceRangeFilter(ISearchCriteria criteria, string field, RangeFilterValue value) { var query = new BoolFilter <ESDocument>(); var lowerbound = value.Lower; var upperbound = value.Upper; var lowerboundincluded = true; var upperboundincluded = false; var currency = criteria.Currency.ToLower(); // format is "fieldname_store_currency_pricelist" string[] pls = null; if (criteria is CatalogIndexedSearchCriteria) { pls = ((CatalogIndexedSearchCriteria)criteria).Pricelists; } var parentPriceList = String.Empty; // Create filter of type // price_USD_pricelist1:[100 TO 200} (-price_USD_pricelist1:[* TO *} +(price_USD_pricelist2:[100 TO 200} (-price_USD_pricelist2:[* TO *} (+price_USD_pricelist3[100 TO 200})))) if (pls == null || !pls.Any()) { return(null); } var priceListId = pls[0].ToLower(); var filter = new RangeFilter <ESDocument>(); filter.Field(String.Format("{0}_{1}_{2}", field, currency, priceListId)).From(lowerbound).To(upperbound).IncludeLower(lowerboundincluded).IncludeUpper(upperboundincluded); //query.Should(q => q.ConstantScore(c => c.Filter(f => f.Range(r => filter)))); query.Should(q => q.Range(r => filter)); if (pls.Count() > 1) { var temp = CreatePriceRangeFilter(pls, 1, field, currency, lowerbound, upperbound, lowerboundincluded, upperboundincluded); query.Should(q => q.Bool(b => temp)); } //Query query = new ConstantScoreQuery(filter); return(query); }
/// <summary> /// Creates the price range filter. /// </summary> /// <param name="criteria">The criteria.</param> /// <param name="field">The field.</param> /// <param name="value">The value.</param> /// <returns></returns> public static BoolFilter<ESDocument> CreatePriceRangeFilter(ISearchCriteria criteria, string field, RangeFilterValue value) { var query = new BoolFilter<ESDocument>(); var lowerbound = value.Lower; var upperbound = value.Upper; var lowerboundincluded = true; var upperboundincluded = false; var currency = criteria.Currency.ToLower(); // format is "fieldname_store_currency_pricelist" string[] pls = null; if (criteria is CatalogItemSearchCriteria) { pls = ((CatalogItemSearchCriteria)criteria).Pricelists; } var parentPriceList = String.Empty; // Create filter of type // price_USD_pricelist1:[100 TO 200} (-price_USD_pricelist1:[* TO *} +(price_USD_pricelist2:[100 TO 200} (-price_USD_pricelist2:[* TO *} (+price_USD_pricelist3[100 TO 200})))) if (pls == null || pls.Count() == 0) return null; var priceListId = pls[0].ToLower(); var filter = new RangeFilter<ESDocument>(); filter.Field(String.Format("{0}_{1}_{2}", field, currency, priceListId)).From(lowerbound).To(upperbound).IncludeLower(lowerboundincluded).IncludeUpper(upperboundincluded); //query.Should(q => q.ConstantScore(c => c.Filter(f => f.Range(r => filter)))); query.Should(q => q.Range(r => filter)); if (pls.Count() > 1) { var temp = CreatePriceRangeFilter(pls, 1, field, currency, lowerbound, upperbound, lowerboundincluded, upperboundincluded); query.Should(q => q.Bool(b => temp)); } //Query query = new ConstantScoreQuery(filter); return query; }
/// <summary> /// Adds the facet queries. /// </summary> /// <param name="param">The param.</param> /// <param name="fieldName">Name of the field.</param> /// <param name="criteria">Search criteria.</param> private void AddFacetQueries(Facets <ESDocument> param, string fieldName, ISearchCriteria criteria) { var ffilter = new BoolFilter <ESDocument>(); foreach (var f in criteria.CurrentFilters) { if (!f.Key.Equals(fieldName)) { var q = ElasticQueryHelper.CreateQuery(criteria, f); ffilter.Must(ff => ff.Bool(bb => q)); } } var facetFilter = new FacetFilter <ESDocument>(); facetFilter.Bool(f => ffilter); param.Terms(t => t.FacetName(fieldName.ToLower()).Field(fieldName.ToLower()).FacetFilter(ff => facetFilter)); }
public static bool Pass( BoolFilter enFilter, bool bVal) { if (enFilter == BoolFilter.Unspecified) { return(true); } if (bVal && (enFilter == BoolFilter.True)) { return(true); } if (!bVal && (enFilter == BoolFilter.False)) { return(true); } return(false); }
public static BoolFilter <ESDocument> CreateQuery(ISearchCriteria criteria, ISearchFilter filter) { var values = GetFilterValues(filter); if (values == null) { return(null); } var query = new BoolFilter <ESDocument>(); foreach (var value in values) { var valueQuery = CreateQueryForValue(criteria, filter, value); //var boolQuery = new Query<ESDocument>(); //boolQuery.Bool(x => valueQuery); query.Should(x => x.Bool(y => valueQuery)); } return(query); }
public ScfeApp(File startingFile, string[] columnsToAdd) { CurrentDir = startingFile ?? new File(Directory.GetCurrentDirectory()); _filter = new AndFilter <File>( new BoolFilter <File>(f => ShowHiddenFiles || !f.IsHidden()), new BranchingFilter <File>(() => _filterOnBoxInput && TextBoxHandler == null, new StringFilter <File>(file => file.GetFileName().ToLowerInvariant(), () => TextBox.Text.ToLowerInvariant()), new TrueFilter <File>())); FileSorting = FileSorters[0]; _noSearchFilter = new BoolFilter <File>(f => ShowHiddenFiles || !f.IsHidden()); Tasks = new TaskPool <string>((task, tresult) => { _cons?.DoGraphicsLater(g => { if (tresult.Message != null) { ShowHelpMessage(tresult.Message, g, tresult.Success ? ConsoleColor.Green : ConsoleColor.Red); } }); }); _main = new Parent(new BorderStrategy()); AddMainBindings(); var p = new Parent(new LineStrategy()); _main.AddComponent(p, BorderStrategy.Top); var p2 = new Parent(new BorderStrategy()); p.AddComponent(p2); p2.AddComponent(new TextComponent("dir: ") { Foreground = ConsoleColor.DarkGray }, BorderStrategy.Left); _filePath = new TextComponent(CurrentDir.Path) { CutOverflowFrom = HorizontalAlignment.Centered, ClearBlankSpaceOnReprint = true }; p2.AddComponent(_filePath, BorderStrategy.Center); _elementsCount = new TextComponent("[...]") { ClearBlankSpaceOnReprint = true }; p2.AddComponent(_elementsCount, BorderStrategy.Right); p.AddComponent(new Separator { Foreground = ConsoleColor.DarkGray }); p = new Parent(new LineStrategy()); _main.AddComponent(p, BorderStrategy.Bottom); p.AddComponent(new Separator { Foreground = ConsoleColor.DarkGray }); p2 = new Parent(new BorderStrategy()); p.AddComponent(p2); var p3 = new Parent(new FlowStrategy(1)); p2.AddComponent(p3, BorderStrategy.Left); _mode = new TextComponent("xxx"); p3.AddComponent(_mode); p3.AddComponent(new Separator { Orientation = Orientation.Vertical, Foreground = ConsoleColor.DarkGray }); p3.AddComponent(new TextComponent("")); // To have an extra separator at the end _help = new TextComponent("Welcome to SCFE!") { ClearBlankSpaceOnReprint = true }; p2.AddComponent(_help, BorderStrategy.Center); p2 = new Parent(new BorderStrategy()); p.AddComponent(p2); p2.AddComponent(new TextComponent("~> "), BorderStrategy.Left); TextBox = new TextField { PlaceholderText = "Press E or M (in NAV mode, with Ctrl in SEA mode) to switch modes. Ctrl+Enter or (Ctrl+)Shift+M for COM mode.", ShowLine = false }; TextBox.OnTextChanged += (sender, args) => { if (_filterOnBoxInput && TextBoxHandler == null) { SwitchToFolder(CurrentDir, args.Graphics); } }; TextBox.ActionOnComponent += (sender, args) => { if (TextBoxHandler != null) { TextBoxHandler(sender, args); } else if (_filterOnBoxInput) { if (_table.Data.Count == 1 && _table.Data[0] != null) { HandlerOpenFileInTable(_table.Data[0], args.Graphics); } TextBox.SetFocused(false, args.Graphics); _table.SetFocused(true, args.Graphics); } }; TextBox.ActionMap.Put(StandardActionNames.CancelAction, (o, args) => { args.Graphics.SetCursorVisible(false); if (TextBoxHandler != null) { CancelTextBoxHandler(args.Graphics); } else if (_filterOnBoxInput) { ResetTextBox(args.Graphics); SwitchToFolder(CurrentDir, args.Graphics); ResetFocusableStates(args.Graphics); } }); p2.AddComponent(TextBox, BorderStrategy.Center); _wrapper = new Parent { ClearAreaBeforePrint = true }; _wrapper.Strategy = new SwitcherStrategy(_wrapper); _main.AddComponent(_wrapper, BorderStrategy.Center); _extensions.Add(new BaseExtension(this)); _extensions.Add(new ComExtension(this)); var gitExt = new GitExtension(this); ColorScheme = gitExt; _extensions.Add(gitExt); _extensions.Add(new FileWatchExtension(this)); _table = new ScfeTable(this); InstallOnActionMap(_table.ActionMap); _table.ActionOnComponent += (o, args) => HandlerOpenFileInTable(_table.FocusedElement, args.Graphics); _table.AddColumn(new IndicatorColumnType <File>()); var columnsAvailable = _extensions.SelectMany(e => e.GetColumns()).ToList(); foreach (var colName in columnsToAdd) { var col = columnsAvailable.FirstOrDefault(c => c.GetTitle(_table, int.MaxValue) == colName); if (col != null) { _table.AddColumn(col); } } _wrapper.AddComponent(_table, 0); ((SwitcherStrategy)_wrapper.Strategy).SwitchToComponentWithHint(0, null); _tableInputMap = new SwappableAddinHierDic <KeyStroke, string>(_table.InputMap); _table.InputMap = _tableInputMap; InstallExtensionsOnFileOptionsPanel(); SwitchToFolder(CurrentDir); ChangeModeTo(NavigationMode.NavMode, null); }
public object BuildQuery(ISearchCriteria criteria) { var builder = new QueryBuilder<ESDocument>(); var mainFilter = new Filter<ESDocument>(); var mainQuery = new BoolQuery<ESDocument>(); #region Sorting // Add sort order if (criteria.Sort != null) { var fields = criteria.Sort.GetSort(); foreach (var field in fields) { builder.Sort(d => d.Field(field.FieldName, field.IsDescending ? SortDirection.desc : SortDirection.asc, ignoreUnmapped: field.IgnoredUnmapped)); } } #endregion #region Filters // Perform facet filters if (criteria.CurrentFilters != null) { var combinedFilter = new BoolFilter<ESDocument>(); // group filters foreach (var filter in criteria.CurrentFilters) { // Skip currencies that are not part of the filter if (filter.GetType() == typeof(PriceRangeFilter)) // special filtering { var priceRangeFilter = filter as PriceRangeFilter; if (priceRangeFilter != null) { var currency = priceRangeFilter.Currency; if (!currency.Equals(criteria.Currency, StringComparison.OrdinalIgnoreCase)) continue; } } var filterQuery = ElasticQueryHelper.CreateQuery(criteria, filter); if (filterQuery != null) { combinedFilter.Must(c => c.Bool(q=>filterQuery)); } } mainFilter.Bool(bl => combinedFilter); } #endregion #region CatalogItemSearchCriteria if (criteria is CatalogItemSearchCriteria) { var c = criteria as CatalogItemSearchCriteria; mainQuery.Must(m => m .Range(r => r.Field("startdate").To(c.StartDate.ToString("s"))) ); if (c.StartDateFrom.HasValue) { mainQuery.Must(m => m .Range(r => r.Field("startdate").From(c.StartDateFrom.Value.ToString("s"))) ); } if (c.EndDate.HasValue) { mainQuery.Must(m => m .Range(r => r.Field("enddate").From(c.EndDate.Value.ToString("s"))) ); } mainQuery.Must(m => m.Term(t => t.Field("__hidden").Value("false"))); if (c.Outlines != null && c.Outlines.Count > 0) AddQuery("__outline", mainQuery, c.Outlines); if (!String.IsNullOrEmpty(c.SearchPhrase)) { AddQueryString("__content", mainQuery, c); } if (!String.IsNullOrEmpty(c.Catalog)) { AddQuery("catalog", mainQuery, c.Catalog); } } #endregion if (criteria is ElasticSearchCriteria) { var c = criteria as ElasticSearchCriteria; mainQuery.Must(m => m.Custom(c.RawQuery)); } builder.Query(q => q.Bool(b => mainQuery)); builder.Filter(f => mainFilter); // Add search facets var facets = GetFacets(criteria); builder.Facets(f => facets); return builder; }
/// <summary> /// Adds the facet queries. /// </summary> /// <param name="param">The param.</param> /// <param name="fieldName">Name of the field.</param> /// <param name="values">The values.</param> private void AddFacetQueries( Facets<ESDocument> param, string fieldName, IEnumerable<AttributeFilterValue> values, ISearchCriteria criteria) { if (values == null) return; var ffilter = new BoolFilter<ESDocument>(); foreach (var f in criteria.CurrentFilters) { if (!f.Key.Equals(fieldName)) { var q = ElasticQueryHelper.CreateQuery(criteria, f); ffilter.Must(ff => ff.Bool(bb=>q)); } } var facetFilter = new FacetFilter<ESDocument>(); facetFilter.Bool(f => ffilter); //var filter = new FacetFilter<ESDocument>(); //facetFilter.Terms(x => x.Values(values.Select(y => y.Value).ToArray())); //var filterFacet = new FilterFacet<ESDocument>(); //filterFacet.FacetName(fieldName.ToLower()).FacetFilter(f => facetFilter); param.Terms(t => t.FacetName(fieldName.ToLower()).Field(fieldName.ToLower()).FacetFilter(ff => facetFilter)); }
public object BuildQuery(ISearchCriteria criteria) { var builder = new QueryBuilder <ESDocument>(); var mainFilter = new Filter <ESDocument>(); var mainQuery = new BoolQuery <ESDocument>(); #region Sorting // Add sort order if (criteria.Sort != null) { var fields = criteria.Sort.GetSort(); foreach (var field in fields) { builder.Sort(d => d.Field(field.FieldName, field.IsDescending ? SortDirection.desc : SortDirection.asc, ignoreUnmapped: field.IgnoredUnmapped)); } } #endregion #region Filters // Perform facet filters if (criteria.CurrentFilters != null) { var combinedFilter = new BoolFilter <ESDocument>(); // group filters foreach (var filter in criteria.CurrentFilters) { // Skip currencies that are not part of the filter if (filter.GetType() == typeof(PriceRangeFilter)) // special filtering { var priceRangeFilter = filter as PriceRangeFilter; if (priceRangeFilter != null) { var currency = priceRangeFilter.Currency; if (!currency.Equals(criteria.Currency, StringComparison.OrdinalIgnoreCase)) { continue; } } } var filterQuery = ElasticQueryHelper.CreateQuery(criteria, filter); if (filterQuery != null) { combinedFilter.Must(c => c.Bool(q => filterQuery)); } } mainFilter.Bool(bl => combinedFilter); } #endregion #region CatalogItemSearchCriteria if (criteria is CatalogItemSearchCriteria) { var c = criteria as CatalogItemSearchCriteria; mainQuery.Must(m => m .Range(r => r.Field("startdate").To(c.StartDate.ToString("s"))) ); if (c.StartDateFrom.HasValue) { mainQuery.Must(m => m .Range(r => r.Field("startdate").From(c.StartDateFrom.Value.ToString("s"))) ); } if (c.EndDate.HasValue) { mainQuery.Must(m => m .Range(r => r.Field("enddate").From(c.EndDate.Value.ToString("s"))) ); } mainQuery.Must(m => m.Term(t => t.Field("__hidden").Value("false"))); if (c.Outlines != null && c.Outlines.Count > 0) { AddQuery("__outline", mainQuery, c.Outlines); } if (!String.IsNullOrEmpty(c.SearchPhrase)) { var contentField = string.Format("__content_{0}", c.Locale.ToLower()); AddQueryString(mainQuery, c, "__content", contentField); } if (!String.IsNullOrEmpty(c.Catalog)) { AddQuery("catalog", mainQuery, c.Catalog); } if (c.ClassTypes != null && c.ClassTypes.Count > 0) { AddQuery("__type", mainQuery, c.ClassTypes, false); } } #endregion if (criteria is ElasticSearchCriteria) { var c = criteria as ElasticSearchCriteria; mainQuery.Must(m => m.Custom(c.RawQuery)); } builder.Query(q => q.Bool(b => mainQuery)); builder.Filter(f => mainFilter); // Add search facets var facets = GetFacets(criteria); builder.Facets(f => facets); return(builder); }
private Filter GetSelectedFilter(List <FacetGroupOption> options, string currentField) { var filters = new List <Filter>(); var facets = _facetRegistry.GetFacetDefinitions(); foreach (var facetGroupOption in options) { if (facetGroupOption.GroupFieldName.Equals(currentField)) { continue; } var filter = facets.FirstOrDefault(x => x.FieldName.Equals(facetGroupOption.GroupFieldName)); if (filter == null) { continue; } if (!facetGroupOption.Facets.Any(x => x.Selected)) { continue; } if (filter is FacetStringDefinition) { filters.Add(new TermsFilter(_findClient.GetFullFieldName(facetGroupOption.GroupFieldName, typeof(string)), facetGroupOption.Facets.Where(x => x.Selected).Select(x => FieldFilterValue.Create(x.Name)))); } else if (filter is FacetStringListDefinition) { var termFilters = facetGroupOption.Facets.Where(x => x.Selected) .Select(s => new TermFilter(facetGroupOption.GroupFieldName, FieldFilterValue.Create(s.Name))) .Cast <Filter>() .ToList(); filters.AddRange(termFilters); } else if (filter is FacetNumericRangeDefinition) { var rangeFilters = filter as FacetNumericRangeDefinition; foreach (var selectedRange in facetGroupOption.Facets.Where(x => x.Selected)) { var rangeFilter = rangeFilters.Range.FirstOrDefault(x => x.Id.Equals(selectedRange.Key.Split(':')[1])); if (rangeFilter == null) { continue; } filters.Add(RangeFilter.Create(_findClient.GetFullFieldName(facetGroupOption.GroupFieldName, typeof(double)), rangeFilter.From ?? 0, rangeFilter.To ?? double.MaxValue)); } } } if (!filters.Any()) { return(null); } if (filters.Count == 1) { return(filters.FirstOrDefault()); } var boolFilter = new BoolFilter(); foreach (var filter in filters) { boolFilter.Should.Add(filter); } return(boolFilter); }
public void Init() { instance = new BoolFilter(); }
//реакция на тычок по созданному фильтру private void lbFilters_SelectedIndexChanged(object sender, EventArgs e) { if (lbFilters.SelectedIndex < 0) { btnChange.Enabled = false; return; } else { btnChange.Enabled = true; } //если жмут по стрелкам, ничего не происходит if (flag) { flag = false; return; } object obj = lbFilters.SelectedItem; if (obj is Bracket) { btnUp.Enabled = btnDown.Enabled = false; } else { btnUp.Enabled = btnDown.Enabled = true; } if (!(obj is Filter)) { return; } Filter filter = obj as Filter; //проставили в комбик нужный фильтр cmbFilters.SelectedIndex = filter.NumInList; if (filter is BoolFilter) { BoolFilter bf = filter as BoolFilter; fBool.Value = bf.Value; } else if (filter is DateFromToFilter) { DateFromToFilter dftf = filter as DateFromToFilter; fDateFromTo.FromValue = dftf.FromValue; fDateFromTo.ToValue = dftf.ToValue; } else if (filter is FromToFilter) { FromToFilter ftf = filter as FromToFilter; fFromTo.FromValue = ftf.FromValue; fFromTo.ToValue = ftf.ToValue; } else if (filter is MultiSelectFilter) { MultiSelectFilter msf = filter as MultiSelectFilter; FillMulti(); fMult.FillList(msf.List, false); foreach (ListItem li in msf.List) { fMult.RemoveAtRight(li.Name); } } else if (filter is TextFilter) { TextFilter tf = filter as TextFilter; fText.Text = tf.Value; } else if (filter is MultiFromToFilter) { MultiSelectFilter msf = (filter as MultiFromToFilter).MultiSelectFilter; FillMulti(); fMult.FillList(msf.List, false); foreach (ListItem li in msf.List) { fMult.RemoveAtRight(li.Name); } FromToFilter ftf = (filter as MultiFromToFilter).FromtoFilter; fFromTo.FromValue = ftf.FromValue; fFromTo.ToValue = ftf.ToValue; } }
/// <summary> /// Adds the facet queries. /// </summary> /// <param name="param">The param.</param> /// <param name="fieldName">Name of the field.</param> /// <param name="criteria">Search criteria.</param> private void AddFacetQueries(Facets<ESDocument> param, string fieldName, ISearchCriteria criteria) { var ffilter = new BoolFilter<ESDocument>(); foreach (var f in criteria.CurrentFilters) { if (!f.Key.Equals(fieldName)) { var q = ElasticQueryHelper.CreateQuery(criteria, f); ffilter.Must(ff => ff.Bool(bb => q)); } } var facetFilter = new FacetFilter<ESDocument>(); facetFilter.Bool(f => ffilter); param.Terms(t => t.FacetName(fieldName.ToLower()).Field(fieldName.ToLower()).FacetFilter(ff => facetFilter)); }