Skip to content

Commit 0a0a7f6

Browse files
committed
Fix function score query so that filters can be applied to all function types
1 parent 8d26def commit 0a0a7f6

File tree

8 files changed

+56
-31
lines changed

8 files changed

+56
-31
lines changed

src/Nest/DSL/Query/Functions/BoostFactorFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Nest
44
{
55
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
6-
public class BoostFactorFunction<T> : FunctionScoreFilteredFunction<T> where T : class
6+
public class BoostFactorFunction<T> : FunctionScoreFunction<T> where T : class
77
{
88
[JsonProperty(PropertyName = "boost_factor")]
99
internal double _BoostFactor { get; set; }

src/Nest/DSL/Query/Functions/FunctionScoreFilteredFunction.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/Nest/DSL/Query/Functions/FunctionScoreFunctionsDescriptor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,21 @@ public FunctionScoreFunction<T> Exp(Expression<Func<T, object>> objectPath, Acti
3737
return fn;
3838
}
3939

40-
public BoostFactorFunction<T> BoostFactor(double value)
40+
public FunctionScoreFunction<T> BoostFactor(double value)
4141
{
4242
var fn = new BoostFactorFunction<T>(value);
4343
this._Functions.Add(fn);
4444
return fn;
4545
}
4646

47-
public ScriptScoreFunction<T> ScriptScore(Action<ScriptFilterDescriptor> scriptSelector)
47+
public FunctionScoreFunction<T> ScriptScore(Action<ScriptFilterDescriptor> scriptSelector)
4848
{
4949
var fn = new ScriptScoreFunction<T>(scriptSelector);
5050
this._Functions.Add(fn);
5151
return fn;
5252
}
5353

54-
public FieldValueFactor<T> FieldValueFactor(Action<FieldValueFactorDescriptor<T>> db)
54+
public FunctionScoreFunction<T> FieldValueFactor(Action<FieldValueFactorDescriptor<T>> db)
5555
{
5656
var fn = new FieldValueFactor<T>(db);
5757
this._Functions.Add(fn);
@@ -101,7 +101,7 @@ public FieldValueFactorDescriptor<T> Modifier(FieldValueFactorModifier modifier)
101101
}
102102

103103
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
104-
public class FieldValueFactor<T> : FunctionScoreFilteredFunction<T> where T : class
104+
public class FieldValueFactor<T> : FunctionScoreFunction<T> where T : class
105105
{
106106
[JsonProperty(PropertyName = "field_value_factor")]
107107
internal FieldValueFactorDescriptor<T> _FieldValueFactor { get; set; }

src/Nest/DSL/Query/Functions/IFunctionScoreFunction.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Nest.Resolvers.Converters;
22
using Newtonsoft.Json;
3+
using System;
34

45
namespace Nest
56
{
@@ -13,6 +14,17 @@ public interface IFunctionScoreFunction
1314
public class FunctionScoreFunction<T> : IFunctionScoreFunction
1415
where T : class
1516
{
16-
17+
[JsonProperty(PropertyName = "filter")]
18+
internal FilterContainer FilterDescriptor { get; set; }
19+
20+
public FunctionScoreFunction<T> Filter(Func<FilterDescriptor<T>, FilterContainer> filterSelector)
21+
{
22+
filterSelector.ThrowIfNull("filterSelector");
23+
var filter = new FilterDescriptor<T>();
24+
var f = filterSelector(filter);
25+
26+
this.FilterDescriptor = f;
27+
return this;
28+
}
1729
}
1830
}

src/Nest/DSL/Query/Functions/ScriptScoreFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
namespace Nest
55
{
66
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
7-
public class ScriptScoreFunction<T> : FunctionScoreFilteredFunction<T> where T : class
7+
public class ScriptScoreFunction<T> : FunctionScoreFunction<T> where T : class
88
{
99
[JsonProperty(PropertyName = "script_score")]
1010
internal ScriptFilterDescriptor _ScriptScore { get; set; }

src/Nest/Nest.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@
239239
<Compile Include="DSL\Query\Functions\FunctionBoostMode.cs" />
240240
<Compile Include="DSL\Query\Functions\FunctionScoreDecayFieldDescriptor.cs" />
241241
<Compile Include="DSL\Query\Functions\FunctionScoreDecayFunction.cs" />
242-
<Compile Include="DSL\Query\Functions\FunctionScoreFilteredFunction.cs" />
243242
<Compile Include="DSL\Query\Functions\FunctionScoreFunctionsDescriptor.cs" />
244243
<Compile Include="DSL\Query\Functions\FunctionScoreMode.cs" />
245244
<Compile Include="DSL\Query\Functions\IFunctionScoreFunction.cs" />

src/Tests/Nest.Tests.Unit/QueryParsers/Queries/FunctionScoreQueryTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public void FunctionScore_Deserializes()
1818
.MaxBoost(0.95f)
1919
.Functions(
2020
ff => ff.Gauss(x => x.StartedOn, d => d.Scale("42w")),
21-
ff => ff.Linear(x => x.FloatValue, d => d.Scale("0.3")),
21+
ff => ff.Linear(x => x.FloatValue, d => d.Scale("0.3")).Filter(lff=>Filter2),
2222
ff => ff.Exp(x => x.DoubleValue, d => d.Scale("0.5")),
2323
ff => ff.BoostFactor(2).Filter(bff=>Filter1)
2424
)

src/Tests/Nest.Tests.Unit/Search/Sorting/FunctionScoreTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,5 +163,41 @@ public void TestBoostFactorWithFilter()
163163
Assert.True(json.JsonEquals(expected), json);
164164
}
165165

166+
[Test]
167+
public void TestDecayFunctionWithFilter()
168+
{
169+
var s = new SearchDescriptor<ElasticsearchProject>().Query(
170+
q => q.FunctionScore(
171+
fs => fs.Functions(
172+
f => f.Gauss(p => p.FloatValue, g => g.Origin("5").Scale("0.1"))
173+
.Filter(gf => gf.Term("term1", "termValue")
174+
)
175+
)
176+
)
177+
);
178+
var json = TestElasticClient.Serialize(s);
179+
var expected = @"{
180+
""query"": {
181+
""function_score"": {
182+
""functions"": [
183+
{
184+
""gauss"": {
185+
""floatValue"": {
186+
""origin"": ""5"",
187+
""scale"": ""0.1""
188+
}
189+
},
190+
""filter"": {
191+
""term"": {
192+
""term1"": ""termValue""
193+
}
194+
}
195+
}
196+
]
197+
}
198+
}
199+
}";
200+
Assert.IsTrue(json.JsonEquals(expected), json);
201+
}
166202
}
167203
}

0 commit comments

Comments
 (0)