private void ProcessFacetFieldBuckets(string root, IFacetParameter <TDocument> facetParameter, string facetName, IFacetItem facetItem) { this._jsonReader.Read();// Starts array while (this._jsonReader.Path.StartsWith($"{root}.{facetName}.buckets[")) { var initialPath = this._jsonReader.Path; this._jsonReader.Read();// "val" property var key = this._jsonReader.ReadAsString(); this._jsonReader.Read();// "count" property var count = this._jsonReader.ReadAsInt32(); var value = new FacetItemFieldValue { Key = key, Quantity = (long)count }; // Go to next token to verify subfacet this._jsonReader.Read(); // Subfacets if (this._jsonReader.TokenType != JsonToken.EndObject) { this.GetFacetItems( initialPath, facetParameter.Facets, out var facetItems); value.Facets = facetItems; } ((List <FacetItemFieldValue>)((FacetItemField)facetItem).Values).Add(value); // Try closes bucket object while (this._jsonReader.TokenType != JsonToken.EndObject) { this._jsonReader.Read(); } this._jsonReader.Read();// Starts next bucket object } }
/// <summary> /// Create a facet field parameter /// </summary> /// <param name="facetParameter">Facet parameter</param> /// <param name="fieldExpression">Expression used to find field name</param> /// <param name="instance">Instance of facet ready to configure</param> /// <returns>Document search engine</returns> public static IFacetFieldParameter <TDocument> FacetField <TDocument>(this IFacetParameter <TDocument> facetParameter, Expression <Func <TDocument, object> > fieldExpression, Action <IFacetFieldParameter <TDocument> > instance = null) where TDocument : Document { Checker.IsNull(fieldExpression); var subFacetParameter = facetParameter.ServiceProvider.GetService <IFacetFieldParameter <TDocument> >(); subFacetParameter.FieldExpression(fieldExpression); instance?.Invoke(subFacetParameter); if (facetParameter.Facets == null) { facetParameter.Facets = new List <IFacetParameter <TDocument> >(); } facetParameter.Facets.Add(subFacetParameter); return(subFacetParameter); }
/// <summary> /// Create a facet range parameter /// </summary> /// <param name="facetParameter">Facet parameter</param> /// <param name="aliasName">Name of alias added in query</param> /// <param name="fieldExpression">Expression used to find field name</param> /// <param name="gap">Size of each range bucket to make facet</param> /// <param name="start">Lower bound to make facet</param> /// <param name="end">Upper bound to make facet</param> /// <param name="instance">Instance of parameter ready to configure</param> /// <returns>Document search engine</returns> public static IFacetRangeParameter <TDocument> FacetRange <TDocument>(this IFacetParameter <TDocument> facetParameter, string aliasName, Expression <Func <TDocument, object> > fieldExpression, string gap, string start, string end, Action <IFacetRangeParameter <TDocument> > instance = null) where TDocument : Document { var subFacetParameter = facetParameter.ServiceProvider.GetService <IFacetRangeParameter <TDocument> >(); subFacetParameter.AliasName(aliasName); subFacetParameter.FieldExpression(fieldExpression); subFacetParameter.Gap(gap); subFacetParameter.Start(start); subFacetParameter.End(end); instance?.Invoke(subFacetParameter); if (facetParameter.Facets == null) { facetParameter.Facets = new List <IFacetParameter <TDocument> >(); } facetParameter.Facets.Add(subFacetParameter); return(subFacetParameter); }
/// <summary> /// Create a facet query parameter /// </summary> /// <param name="facetParameter">Facet parameter</param> /// <param name="aliasName">Name of alias added in query</param> /// <param name="query">Query used to make facet</param> /// <param name="instance">Instance of facet ready to configure</param> /// <returns>Document search engine</returns> public static IFacetQueryParameter <TDocument> FacetQuery <TDocument>(this IFacetParameter <TDocument> facetParameter, string aliasName, Action <SearchQuery <TDocument> > query, Action <IFacetQueryParameter <TDocument> > instance = null) where TDocument : Document { Checker.IsNull(query); var subFacetParameter = facetParameter.ServiceProvider.GetService <IFacetQueryParameter <TDocument> >(); subFacetParameter.AliasName(aliasName); var search = facetParameter.ServiceProvider.GetService <SearchQuery <TDocument> >(); query.Invoke(search); subFacetParameter.Query(search); instance?.Invoke(subFacetParameter); if (facetParameter.Facets == null) { facetParameter.Facets = new List <IFacetParameter <TDocument> >(); } facetParameter.Facets.Add(subFacetParameter); return(subFacetParameter); }