예제 #1
0
        private IAggregate GetSingleBucketAggregate(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
        {
            var docCount = reader.ReadInt64();
            var token    = reader.GetCurrentJsonToken();
            Dictionary <string, IAggregate> subAggregates = null;

            if (token == JsonToken.ValueSeparator)
            {
                reader.ReadNext();                 // ,

                long bgCount      = 0;
                var  propertyName = reader.ReadPropertyNameSegmentRaw();

                if (propertyName.EqualsBytes(BgCountField))
                {
                    bgCount = reader.ReadInt64();
                    reader.ReadIsValueSeparatorWithVerify();
                    propertyName = reader.ReadPropertyNameSegmentRaw();
                }

                if (propertyName.EqualsBytes(FieldsField))
                {
                    return(GetMatrixStatsAggregate(ref reader, formatterResolver, docCount));
                }

                if (propertyName.EqualsBytes(BucketsField))
                {
                    var b = GetMultiBucketAggregate(ref reader, formatterResolver, ref propertyName) as BucketAggregate;
                    return(new BucketAggregate
                    {
                        BgCount = bgCount,
                        DocCount = docCount,
                        Items = b?.Items ?? EmptyReadOnly <IBucket> .Collection
                    });
                }

                subAggregates = GetSubAggregates(ref reader, propertyName.Utf8String(), formatterResolver);
            }
            else
            {
                reader.ReadIsEndObjectWithVerify();
            }

            var bucket = new SingleBucketAggregate(subAggregates)
            {
                DocCount = docCount
            };

            return(bucket);
        }
예제 #2
0
        private IAggregate GetSingleBucketAggregate(JsonReader reader, JsonSerializer serializer)
        {
            reader.Read();
            var docCount = (reader.Value as long?).GetValueOrDefault(0);

            reader.Read();
            long bgCount = 0;

            if ((string)reader.Value == Parser.BgCount)
            {
                reader.Read();
                bgCount = (reader.Value as long?).GetValueOrDefault(0);
                reader.Read();
            }
            if ((string)reader.Value == Parser.Fields)
            {
                return(GetMatrixStatsAggregate(reader, serializer, docCount));
            }

            if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == Parser.Buckets)
            {
                var b = this.GetMultiBucketAggregate(reader, serializer) as BucketAggregate;
                return(new BucketAggregate
                {
                    BgCount = bgCount,
                    DocCount = docCount,
                    Items = b?.Items ?? EmptyReadOnly <IBucket> .Collection
                });
            }

            var nestedAggregations = this.GetSubAggregates(reader, serializer);
            var bucket             = new SingleBucketAggregate(nestedAggregations)
            {
                DocCount = docCount
            };

            return(bucket);
        }
예제 #3
0
        private IAggregate GetSingleBucketAggregate(JsonReader reader, JsonSerializer serializer)
        {
            reader.Read();
            var docCount = (reader.Value as long?).GetValueOrDefault(0);
            var bucket   = new SingleBucketAggregate {
                DocCount = docCount
            };

            reader.Read();
            if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "buckets")
            {
                var b = this.GetMultiBucketAggregate(reader, serializer) as BucketAggregate;
                return(new BucketAggregate
                {
                    DocCount = docCount,
                    Items = b.Items
                });
            }

            bucket.Aggregations = this.GetSubAggregates(reader, serializer);

            return(bucket);
        }