Skip to content

Commit 1828a5b

Browse files
committed
Include value_as_string for ValueAggregate
fixes #2479 (cherry picked from commit 10fe701)
1 parent bf4560d commit 1828a5b

File tree

8 files changed

+131
-67
lines changed

8 files changed

+131
-67
lines changed

docs/aggregations/metric/min/min-aggregation-usage.asciidoc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ please modify the original csharp file found at the link and submit the PR with
2121
----
2222
s => s
2323
.Aggregations(a => a
24-
.Min("min_commits", m => m
25-
.Field(p => p.NumberOfCommits)
24+
.Min("min_last_activity", m => m
25+
.Field(p => p.LastActivity)
2626
)
2727
)
2828
----
@@ -33,7 +33,7 @@ s => s
3333
----
3434
new SearchRequest<Project>
3535
{
36-
Aggregations = new MinAggregation("min_commits", Field<Project>(p => p.NumberOfCommits))
36+
Aggregations = new MinAggregation("min_last_activity", Field<Project>(p => p.LastActivity))
3737
}
3838
----
3939

@@ -42,9 +42,9 @@ new SearchRequest<Project>
4242
----
4343
{
4444
"aggs": {
45-
"min_commits": {
45+
"min_last_activity": {
4646
"min": {
47-
"field": "numberOfCommits"
47+
"field": "lastActivity"
4848
}
4949
}
5050
}
@@ -56,8 +56,9 @@ new SearchRequest<Project>
5656
[source,csharp]
5757
----
5858
response.ShouldBeValid();
59-
var min = response.Aggs.Max("min_commits");
59+
var min = response.Aggs.Min("min_last_activity");
6060
min.Should().NotBeNull();
6161
min.Value.Should().BeGreaterThan(0);
62+
min.ValueAsString.Should().NotBeNullOrEmpty();
6263
----
6364

docs/client-concepts/connection-pooling/sniffing/address-parsing.asciidoc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,33 @@ please modify the original csharp file found at the link and submit the PR with
1515
[[address-parsing]]
1616
== Address Parsing
1717

18+
[source,csharp]
19+
----
20+
var testcases = new[,]
21+
{
22+
{"helloworld/[::1]:9200", "helloworld", "[::1]", "9200"},
23+
{"elastic.co/192.168.2.1:231", "elastic.co", "192.168.2.1", "231"}
24+
};
25+
26+
var address = testcases[i, 0];
27+
28+
var fqdn = testcases[i, 1];
29+
30+
var ip = testcases[i, 2];
31+
32+
var port = testcases[i, 3];
33+
34+
var match = SniffParser.AddressRegex.Match(address);
35+
36+
match.Success.Should().BeTrue();
37+
38+
match.Groups["fqdn"].Value.ShouldBeEquivalentTo(fqdn);
39+
40+
match.Groups["ip"].Value.ShouldBeEquivalentTo(ip);
41+
42+
match.Groups["port"].Value.ShouldBeEquivalentTo(port);
43+
----
44+
1845
[source,csharp]
1946
----
2047
var testcases = new[,]

src/Nest/Aggregations/AggregateJsonConverter.cs

Lines changed: 84 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,22 @@ private IAggregate ReadAggregate(JsonReader reader, JsonSerializer serializer)
3434

3535
IAggregate aggregate = null;
3636

37-
var property = reader.Value as string;
38-
if (_numeric.IsMatch(property))
37+
var propertyName = (string)reader.Value;
38+
if (_numeric.IsMatch(propertyName))
3939
aggregate = GetPercentilesAggregate(reader, serializer, oldFormat: true);
4040

41-
var meta = (property == "meta") ? GetMetadata(reader) : null;
41+
var meta = propertyName == "meta"
42+
? GetMetadata(reader)
43+
: null;
4244

4345
if (aggregate != null)
4446
{
4547
aggregate.Meta = meta;
4648
return aggregate;
4749
}
4850

49-
property = reader.Value as string;
50-
51-
switch (property)
51+
propertyName = (string)reader.Value;
52+
switch (propertyName)
5253
{
5354
case "values":
5455
reader.Read();
@@ -96,10 +97,8 @@ private IBucket ReadBucket(JsonReader reader, JsonSerializer serializer)
9697
if (reader.TokenType != JsonToken.PropertyName)
9798
return null;
9899

99-
IBucket item = null;
100-
101-
var property = reader.Value as string;
102-
100+
IBucket item;
101+
var property = (string)reader.Value;
103102
switch (property)
104103
{
105104
case "key":
@@ -128,7 +127,7 @@ private Dictionary<string, object> GetMetadata(JsonReader reader)
128127
reader.Read();
129128
while (reader.TokenType != JsonToken.EndObject)
130129
{
131-
var key = reader.Value as string;
130+
var key = (string)reader.Value;
132131
reader.Read();
133132
var value = reader.Value;
134133
meta.Add(key, value);
@@ -156,7 +155,7 @@ private IAggregate GetTopHitsAggregate(JsonReader reader, JsonSerializer seriali
156155

157156
var total = o["total"].ToObject<long>();
158157
var maxScore = o["max_score"].ToObject<double?>();
159-
var hits = o["hits"].Children().OfType<JObject>().Select(s => s);
158+
var hits = o["hits"].Children().OfType<JObject>();
160159
reader.Read();
161160
return new TopHitsAggregate(hits, serializer) { Total = total, MaxScore = maxScore };
162161
}
@@ -203,14 +202,16 @@ private IAggregate GetPercentilesAggregate(JsonReader reader, JsonSerializer ser
203202
reader.Read();
204203
while (reader.TokenType != JsonToken.EndObject)
205204
{
206-
if ((reader.Value as string).Contains("_as_string"))
205+
var propertyName = (string)reader.Value;
206+
if (propertyName.Contains("_as_string"))
207207
{
208208
reader.Read();
209209
reader.Read();
210210
}
211211
if (reader.TokenType != JsonToken.EndObject)
212212
{
213-
var percentile = double.Parse(reader.Value as string, CultureInfo.InvariantCulture);
213+
var percentileValue = (string)reader.Value;
214+
var percentile = double.Parse(percentileValue, CultureInfo.InvariantCulture);
214215
reader.Read();
215216
var value = reader.Value as double?;
216217
percentileItems.Add(new PercentileItem()
@@ -252,13 +253,13 @@ private IAggregate GetStatsAggregate(JsonReader reader, JsonSerializer serialize
252253
reader.Read();
253254
var count = (reader.Value as long?).GetValueOrDefault(0);
254255
reader.Read(); reader.Read();
255-
var min = (reader.Value as double?);
256+
var min = reader.Value as double?;
256257
reader.Read(); reader.Read();
257-
var max = (reader.Value as double?);
258+
var max = reader.Value as double?;
258259
reader.Read(); reader.Read();
259-
var average = (reader.Value as double?);
260+
var average = reader.Value as double?;
260261
reader.Read(); reader.Read();
261-
var sum = (reader.Value as double?);
262+
var sum = reader.Value as double?;
262263

263264
var statsMetric = new StatsAggregate()
264265
{
@@ -274,7 +275,8 @@ private IAggregate GetStatsAggregate(JsonReader reader, JsonSerializer serialize
274275
if (reader.TokenType == JsonToken.EndObject)
275276
return statsMetric;
276277

277-
while (reader.TokenType != JsonToken.EndObject && (reader.Value as string).Contains("_as_string"))
278+
var propertyName = (string)reader.Value;
279+
while (reader.TokenType != JsonToken.EndObject && propertyName.Contains("_as_string"))
278280
{
279281
reader.Read();
280282
reader.Read();
@@ -306,18 +308,24 @@ private IAggregate GetExtendedStatsAggregate(StatsAggregate statsMetric, JsonRea
306308
extendedStatsMetric.StdDeviation = (reader.Value as double?);
307309
reader.Read();
308310

311+
string propertyName;
312+
309313
if (reader.TokenType != JsonToken.EndObject)
310314
{
311315
var bounds = new StandardDeviationBounds();
312316
reader.Read();
313317
reader.Read();
314-
if ((reader.Value as string) == "upper")
318+
319+
propertyName = (string)reader.Value;
320+
if (propertyName == "upper")
315321
{
316322
reader.Read();
317323
bounds.Upper = reader.Value as double?;
318324
}
319325
reader.Read();
320-
if ((reader.Value as string) == "lower")
326+
327+
propertyName = (string)reader.Value;
328+
if (propertyName == "lower")
321329
{
322330
reader.Read();
323331
bounds.Lower = reader.Value as double?;
@@ -326,10 +334,12 @@ private IAggregate GetExtendedStatsAggregate(StatsAggregate statsMetric, JsonRea
326334
reader.Read();
327335
reader.Read();
328336
}
329-
while (reader.TokenType != JsonToken.EndObject && (reader.Value as string).Contains("_as_string"))
337+
338+
propertyName = (string)reader.Value;
339+
while (reader.TokenType != JsonToken.EndObject && propertyName.Contains("_as_string"))
330340
{
331341
// std_deviation_bounds is an object, so we need to skip its properties
332-
if ((reader.Value as string).Equals("std_deviation_bounds_as_string"))
342+
if (propertyName.Equals("std_deviation_bounds_as_string"))
333343
{
334344
reader.Read();
335345
reader.Read();
@@ -351,7 +361,7 @@ private IReadOnlyDictionary<string, IAggregate> GetSubAggregates(JsonReader read
351361
var currentDepth = reader.Depth;
352362
do
353363
{
354-
var fieldName = reader.Value as string;
364+
var fieldName = (string)reader.Value;
355365
reader.Read();
356366
var agg = this.ReadAggregate(reader, serializer);
357367
nestedAggs.Add(fieldName, agg);
@@ -365,15 +375,15 @@ private IReadOnlyDictionary<string, IAggregate> GetSubAggregates(JsonReader read
365375
private IAggregate GetMultiBucketAggregate(JsonReader reader, JsonSerializer serializer)
366376
{
367377
var bucket = new BucketAggregate();
368-
var property = reader.Value as string;
369-
if (property == "doc_count_error_upper_bound")
378+
var propertyName = (string)reader.Value;
379+
if (propertyName == "doc_count_error_upper_bound")
370380
{
371381
reader.Read();
372382
bucket.DocCountErrorUpperBound = reader.Value as long?;
373383
reader.Read();
374384
}
375-
property = reader.Value as string;
376-
if (property == "sum_other_doc_count")
385+
propertyName = (string)reader.Value;
386+
if (propertyName == "sum_other_doc_count")
377387
{
378388
reader.Read();
379389
bucket.SumOtherDocCount = reader.Value as long?;
@@ -422,9 +432,9 @@ private IAggregate GetMultiBucketAggregate(JsonReader reader, JsonSerializer ser
422432
private IAggregate GetValueAggregate(JsonReader reader, JsonSerializer serializer)
423433
{
424434
reader.Read();
425-
var valueMetric = new ValueAggregate()
435+
var valueMetric = new ValueAggregate
426436
{
427-
Value = (reader.Value as double?)
437+
Value = reader.Value as double?
428438
};
429439
if (valueMetric.Value == null && reader.ValueType == typeof(long))
430440
valueMetric.Value = reader.Value as long?;
@@ -434,23 +444,38 @@ private IAggregate GetValueAggregate(JsonReader reader, JsonSerializer serialize
434444
reader.Read();
435445
if (reader.TokenType != JsonToken.EndObject)
436446
{
437-
if (reader.TokenType == JsonToken.PropertyName && (reader.Value as string) == "keys")
447+
if (reader.TokenType == JsonToken.PropertyName)
438448
{
439-
var keyedValueMetric = new KeyedValueAggregate
440-
{
441-
Value = valueMetric.Value
442-
};
443-
var keys = new List<string>();
444-
reader.Read();
445-
reader.Read();
446-
while (reader.TokenType != JsonToken.EndArray)
449+
var propertyName = (string)reader.Value;
450+
451+
if (propertyName == "value_as_string")
447452
{
448-
keys.Add(reader.Value.ToString());
453+
valueMetric.ValueAsString = reader.ReadAsString();
449454
reader.Read();
450455
}
451-
reader.Read();
452-
keyedValueMetric.Keys = keys;
453-
return keyedValueMetric;
456+
457+
if (reader.TokenType == JsonToken.PropertyName)
458+
{
459+
propertyName = (string)reader.Value;
460+
if (propertyName == "keys")
461+
{
462+
var keyedValueMetric = new KeyedValueAggregate
463+
{
464+
Value = valueMetric.Value
465+
};
466+
var keys = new List<string>();
467+
reader.Read();
468+
reader.Read();
469+
while (reader.TokenType != JsonToken.EndArray)
470+
{
471+
keys.Add(reader.Value.ToString());
472+
reader.Read();
473+
}
474+
reader.Read();
475+
keyedValueMetric.Keys = keys;
476+
return keyedValueMetric;
477+
}
478+
}
454479
}
455480
else
456481
{
@@ -533,14 +558,22 @@ public IBucket GetRangeBucket(JsonReader reader, JsonSerializer serializer, stri
533558
private IBucket GetDateHistogramBucket(JsonReader reader, JsonSerializer serializer)
534559
{
535560
var keyAsString = reader.ReadAsString();
536-
reader.Read(); reader.Read();
561+
reader.Read();
562+
reader.Read();
537563
var key = (reader.Value as long?).GetValueOrDefault(0);
538-
reader.Read(); reader.Read();
564+
reader.Read();
565+
reader.Read();
539566
var docCount = (reader.Value as long?).GetValueOrDefault(0);
540567
reader.Read();
541568

542-
var dateHistogram = new DateHistogramBucket() { Key = key, KeyAsString = keyAsString, DocCount = docCount };
543-
dateHistogram.Aggregations = this.GetSubAggregates(reader, serializer);
569+
var dateHistogram = new DateHistogramBucket
570+
{
571+
Key = key,
572+
KeyAsString = keyAsString,
573+
DocCount = docCount,
574+
Aggregations = this.GetSubAggregates(reader, serializer)
575+
};
576+
544577
return dateHistogram;
545578

546579
}
@@ -550,13 +583,13 @@ private IBucket GetKeyedBucket(JsonReader reader, JsonSerializer serializer)
550583
reader.Read();
551584
var key = reader.Value;
552585
reader.Read();
553-
var property = reader.Value as string;
554-
if (property == "from" || property == "to")
586+
var propertyName = (string)reader.Value;
587+
if (propertyName == "from" || propertyName == "to")
555588
return GetRangeBucket(reader, serializer, key as string);
556589

557590
var bucket = new KeyedBucket<object> { Key = key };
558591

559-
if (property == "key_as_string")
592+
if (propertyName == "key_as_string")
560593
{
561594
bucket.KeyAsString = reader.ReadAsString();
562595
reader.Read();
@@ -567,7 +600,7 @@ private IBucket GetKeyedBucket(JsonReader reader, JsonSerializer serializer)
567600
bucket.DocCount = docCount.GetValueOrDefault(0);
568601
reader.Read();
569602

570-
var nextProperty = reader.Value as string;
603+
var nextProperty = (string)reader.Value;
571604
if (nextProperty == "score")
572605
return GetSignificantTermsBucket(reader, serializer, bucket);
573606

src/Nest/Aggregations/Metric/TopHits/TopHitsAggregate.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal TopHitsAggregate(IEnumerable<JObject> hits)
2424

2525
internal TopHitsAggregate(IEnumerable<JObject> hits, JsonSerializer serializer)
2626
{
27-
_hits = hits ?? Enumerable.Empty<JObject>();;
27+
_hits = hits ?? Enumerable.Empty<JObject>();
2828
_defaultSerializer = serializer;
2929
}
3030

src/Nest/Aggregations/Metric/ValueMetricAggregate.cs renamed to src/Nest/Aggregations/Metric/ValueAggregate.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
public class ValueAggregate : MetricAggregateBase
44
{
55
public double? Value { get; set; }
6+
7+
public string ValueAsString { get; set; }
68
}
7-
}
9+
}

src/Nest/Nest.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
<Compile Include="Aggregations\Metric\TopHits\TopHitsAggregate.cs" />
142142
<Compile Include="Aggregations\Metric\TopHits\TopHitsAggregation.cs" />
143143
<Compile Include="Aggregations\Metric\ValueCount\ValueCountAggregation.cs" />
144-
<Compile Include="Aggregations\Metric\ValueMetricAggregate.cs" />
144+
<Compile Include="Aggregations\Metric\ValueAggregate.cs" />
145145
<Compile Include="Aggregations\Pipeline\AverageBucket\AverageBucketAggregation.cs" />
146146
<Compile Include="Aggregations\Pipeline\BucketScript\BucketScriptAggregation.cs" />
147147
<Compile Include="Aggregations\Pipeline\BucketSelector\BucketSelectorAggregation.cs" />

0 commit comments

Comments
 (0)