Skip to content

Commit dd1bbfa

Browse files
Fix distance_feature query serialization (#4488) (#4489)
Closes #4487 Co-authored-by: Russ Cam <[email protected]>
1 parent 30dd03e commit dd1bbfa

File tree

4 files changed

+53
-8
lines changed

4 files changed

+53
-8
lines changed

docs/query-dsl/specialized/distance-feature/distance-feature-query-usage.asciidoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ An instance of `GeoCoordinate` can be provided as the `origin`, with `pivot` bei
7878
----
7979
q
8080
.DistanceFeature(rf => rf
81+
.Name("name")
8182
.Boost(1.1)
8283
.Field(f => f.LeadDeveloper.Location)
8384
.Origin(new GeoCoordinate(70, -70))
@@ -91,6 +92,7 @@ q
9192
----
9293
new DistanceFeatureQuery()
9394
{
95+
Name = "name",
9496
Boost = 1.1,
9597
Field = Infer.Field<Project>(f => f.LeadDeveloper.Location),
9698
Origin = new GeoCoordinate(70, -70),
@@ -103,6 +105,7 @@ new DistanceFeatureQuery()
103105
----
104106
{
105107
"distance_feature": {
108+
"_name": "name",
106109
"boost": 1.1,
107110
"field": "leadDeveloper.location",
108111
"origin": [

src/Nest/QueryDsl/Specialized/DistanceFeature/DistanceFeatureQuery.cs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ public void Serialize(ref JsonWriter writer, IDistanceFeatureQuery value, IJsonF
9090

9191
writer.WriteBeginObject();
9292

93+
if (!string.IsNullOrEmpty(value.Name))
94+
{
95+
writer.WritePropertyName("_name");
96+
writer.WriteString(value.Name);
97+
writer.WriteValueSeparator();
98+
}
99+
100+
if (value.Boost.HasValue)
101+
{
102+
writer.WritePropertyName("boost");
103+
writer.WriteDouble(value.Boost.Value);
104+
writer.WriteValueSeparator();
105+
}
106+
93107
writer.WritePropertyName("field");
94108
var fieldFormatter = formatterResolver.GetFormatter<Field>();
95109
fieldFormatter.Serialize(ref writer, value.Field, formatterResolver);
@@ -101,13 +115,6 @@ public void Serialize(ref JsonWriter writer, IDistanceFeatureQuery value, IJsonF
101115

102116
writer.WritePropertyName("pivot");
103117
PivotUnionFormatter.Serialize(ref writer, value.Pivot, formatterResolver);
104-
writer.WriteValueSeparator();
105-
106-
if (value.Boost.HasValue)
107-
{
108-
writer.WritePropertyName("boost");
109-
writer.WriteDouble(value.Boost.Value);
110-
}
111118

112119
writer.WriteEndObject();
113120
}
@@ -117,7 +124,8 @@ public void Serialize(ref JsonWriter writer, IDistanceFeatureQuery value, IJsonF
117124
{ "field", 0 },
118125
{ "origin", 1 },
119126
{ "pivot", 2 },
120-
{ "boost", 3 }
127+
{ "boost", 3 },
128+
{ "_name", 4 }
121129
};
122130

123131
public IDistanceFeatureQuery Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
@@ -145,6 +153,9 @@ public IDistanceFeatureQuery Deserialize(ref JsonReader reader, IJsonFormatterRe
145153
case 3:
146154
query.Boost = reader.ReadDouble();
147155
break;
156+
case 4:
157+
query.Name = reader.ReadString();
158+
break;
148159
}
149160
}
150161
else
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Elastic.Xunit.XunitPlumbing;
2+
using Elasticsearch.Net;
3+
using FluentAssertions;
4+
using Nest;
5+
using Tests.Core.Client;
6+
7+
namespace Tests.Reproduce
8+
{
9+
public class GitHubIssue4487
10+
{
11+
[U]
12+
public void CanSerializeDistanceFeatureQueryWithoutBoost()
13+
{
14+
var searchRequest = new SearchRequest
15+
{
16+
Query = new DistanceFeatureQuery
17+
{
18+
Field = "foo",
19+
Origin = new GeoCoordinate(90, 90),
20+
Pivot = Distance.Meters(100)
21+
}
22+
};
23+
24+
var json = TestClient.DefaultInMemoryClient.RequestResponseSerializer.SerializeToString(searchRequest);
25+
json.Should().Be(@"{""query"":{""distance_feature"":{""field"":""foo"",""origin"":[90.0,90.0],""pivot"":""100m""}}}");
26+
}
27+
}
28+
}

tests/Tests/QueryDsl/Specialized/DistanceFeature/DistanceFeatureQueryUsageTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public DistanceFeatureDistanceQueryUsageTests(ReadOnlyCluster i, EndpointUsage u
8686

8787
protected override QueryContainer QueryInitializer => new DistanceFeatureQuery()
8888
{
89+
Name = "name",
8990
Boost = 1.1,
9091
Field = Infer.Field<Project>(f => f.LeadDeveloper.Location),
9192
Origin = new GeoCoordinate(70, -70),
@@ -97,6 +98,7 @@ public DistanceFeatureDistanceQueryUsageTests(ReadOnlyCluster i, EndpointUsage u
9798
{
9899
distance_feature = new
99100
{
101+
_name = "name",
100102
boost = 1.1,
101103
field = "leadDeveloper.location",
102104
origin = new [] { -70.0, 70.0 },
@@ -106,6 +108,7 @@ public DistanceFeatureDistanceQueryUsageTests(ReadOnlyCluster i, EndpointUsage u
106108

107109
protected override QueryContainer QueryFluent(QueryContainerDescriptor<Project> q) => q
108110
.DistanceFeature(rf => rf
111+
.Name("name")
109112
.Boost(1.1)
110113
.Field(f => f.LeadDeveloper.Location)
111114
.Origin(new GeoCoordinate(70, -70))

0 commit comments

Comments
 (0)