Skip to content

Commit b605715

Browse files
committed
Fix exception in ConcreteTypeConverter when _score is null
Closes #1863 Closes #1929
1 parent 149349b commit b605715

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

Diff for: src/Nest/CommonAbstractions/SerializationBehavior/StatefulDeserialization/ConcreteTypeConverter.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
6666
instance.Fields = new FieldValues(serializer.GetConnectionSettings().Inferrer, instance.Fields);
6767
return instance;
6868
}
69-
69+
7070
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
7171
{
7272
throw new NotSupportedException();
7373
}
7474
}
7575

76-
internal static class ConcreteTypeConverter
76+
internal static class ConcreteTypeConverter
7777
{
7878
internal static object GetUsingConcreteTypeConverter<T>(
7979
JsonReader reader, JsonSerializer serializer, ConcreteTypeConverter<T> realConcreteConverter)
@@ -103,8 +103,8 @@ private static object GetHitTypeInstance(Type concreteType)
103103
}
104104

105105
internal static Type GetConcreteTypeUsingSelector<T>(
106-
JsonSerializer serializer,
107-
ConcreteTypeConverter<T> realConcreteConverter,
106+
JsonSerializer serializer,
107+
ConcreteTypeConverter<T> realConcreteConverter,
108108
JObject jObject)
109109
where T: class
110110
{
@@ -122,7 +122,7 @@ internal static Type GetConcreteTypeUsingSelector<T>(
122122
hitDynamic.Fields = fieldValues;
123123
hitDynamic.Source = d._source;
124124
hitDynamic.Index = d._index;
125-
hitDynamic.Score = d._score;
125+
hitDynamic.Score = d._score != null ? (double)d._score : 0;
126126
hitDynamic.Type = d._type;
127127
hitDynamic.Version = d._version;
128128
hitDynamic.Id = d._id;
@@ -136,4 +136,4 @@ internal static Type GetConcreteTypeUsingSelector<T>(
136136
return concreteType;
137137
}
138138
}
139-
}
139+
}

Diff for: src/Nest/Search/Search/Hits/Hit.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ public class Hit<T> : IHit<T>
3737

3838
[JsonProperty(PropertyName = "_index")]
3939
public string Index { get; internal set; }
40-
40+
4141
[JsonProperty(PropertyName = "inner_hits")]
4242
[JsonConverter(typeof(VerbatimDictionaryKeysJsonConverter))]
4343
public IDictionary<string, InnerHitsResult> InnerHits { get; internal set; }
44-
44+
45+
// TODO make this nullable for 5.0
4546
[JsonProperty(PropertyName = "_score")]
4647
public double Score { get; set; }
4748

Diff for: src/Tests/Reproduce/GithubIssue1863.cs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using Elasticsearch.Net;
6+
using Nest;
7+
using FluentAssertions;
8+
using Tests.Framework;
9+
using Xunit;
10+
using Tests.Framework.Integration;
11+
using Tests.Framework.MockData;
12+
13+
namespace Tests.Reproduce
14+
{
15+
[Collection(IntegrationContext.ReadOnly)]
16+
public class GithubIssue1863
17+
{
18+
[I]
19+
public void ConcreteTypeConverterThrowsExceptionOnNullScore()
20+
{
21+
var client = TestClient.GetClient();
22+
var response = client.Search<Project>(s => s
23+
.ConcreteTypeSelector((d,h) => typeof(Project))
24+
.Sort(srt => srt.Ascending(p => p.StartedOn))
25+
);
26+
response.Hits.Count().Should().BeGreaterThan(0);
27+
response.Hits.All(h => h.Score == 0).Should().BeTrue();
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)