Пример #1
0
        private IFacetItem GetFacetItem(string root, IEnumerable <IFacetParameter <TDocument> > facetParameters)
        {
            var        initialPath    = this._jsonReader.Path;
            var        facetName      = (string)this._jsonReader.Value;
            var        facetParameter = GetFacetParameter(facetParameters, facetName);
            IFacetItem facetItem;

            this._jsonReader.Read(); // Closes property
            this._jsonReader.Read(); // Go to checker element

            // Facet query
            if ((string)this._jsonReader.Value == "count")
            {
                facetItem = new FacetItemQuery(facetName, (long)this._jsonReader.ReadAsInt32());

                this._jsonReader.Read();// Closes count property

                // Subfacets
                if (this._jsonReader.TokenType != JsonToken.EndObject)
                {
                    this.GetFacetItems(
                        initialPath,
                        facetParameter.Facets.ToList(),
                        out var facetItems);

                    ((FacetItemQuery)facetItem).Facets = facetItems;
                }
            }
            else // Facet field or facet range
            {
                var facetRangeParameter = facetParameter as IFacetRangeParameter <TDocument>;

                this._jsonReader.Read();// Closes buckets property

                if (facetRangeParameter != null)
                {
                    var fieldType = facetRangeParameter
                                    .ExpressionBuilder
                                    .GetPropertyType(facetRangeParameter.FieldExpression);

                    facetItem = new FacetItemRange(facetName);
                    this.ProcessFacetRangeBuckets(root, facetRangeParameter, facetName, facetItem, fieldType);
                }
                else
                {
                    facetItem = new FacetItemField(facetName);
                    this.ProcessFacetFieldBuckets(root, facetParameter, facetName, facetItem);
                }
            }

            // Closes facet item object
            while (!this._jsonReader.Path.Equals($"{root}.{facetName}") && this._jsonReader.TokenType != JsonToken.EndObject)
            {
                this._jsonReader.Read();
            }

            return(facetItem);
        }
Пример #2
0
        /// <summary>
        /// Execute processing facet queries
        /// </summary>
        private static IEnumerable <FacetItemQuery> ProcessFacetQueries(JsonReader jsonReader)
        {
            var facetItemQueries = new List <FacetItemQuery>();

            jsonReader.Read(); // Start object
            jsonReader.Read(); // Start property name

            while (jsonReader.TokenType != JsonToken.EndObject)
            {
                var facetItem = new FacetItemQuery(
                    (string)jsonReader.Value,
                    (long)jsonReader.ReadAsInt32());

                facetItemQueries.Add(facetItem);

                jsonReader.Read();
            }

            return(facetItemQueries.ToArray());
        }