Skip to content

Commit 66692b6

Browse files
committed
Fix #1456: Added ScriptFile to ScriptFilterDescriptor
1 parent 9b7891a commit 66692b6

File tree

3 files changed

+59
-13
lines changed

3 files changed

+59
-13
lines changed

Diff for: src/Nest/DSL/Filter/ScriptFilterDescriptor.cs

+27-13
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public interface IScriptFilter : IFilter
1717
[JsonProperty(PropertyName = "script_id")]
1818
string ScriptId { get; set; }
1919

20+
[JsonProperty("script_file")]
21+
string ScriptFile { get; set; }
22+
2023
[JsonProperty(PropertyName = "params")]
2124
[JsonConverter(typeof (DictionaryKeysAreNotPropertyNamesJsonConverter))]
2225
Dictionary<string, object> Params { get; set; }
@@ -34,6 +37,7 @@ protected internal override void WrapInContainer(IFilterContainer container)
3437

3538
public string Script { get; set; }
3639
public string ScriptId { get; set; }
40+
public string ScriptFile { get; set; }
3741
public Dictionary<string, object> Params { get; set; }
3842
public string Lang { get; set; }
3943
}
@@ -44,10 +48,14 @@ protected internal override void WrapInContainer(IFilterContainer container)
4448
/// </summary>
4549
public class ScriptFilterDescriptor : FilterBase, IScriptFilter
4650
{
51+
private IScriptFilter Self { get { return this; } }
52+
4753
string IScriptFilter.Script { get; set; }
4854

4955
string IScriptFilter.ScriptId { get; set; }
5056

57+
string IScriptFilter.ScriptFile { get; set; }
58+
5159
string IScriptFilter.Lang { get; set; }
5260

5361
Dictionary<string, object> IScriptFilter.Params { get; set; }
@@ -56,33 +64,39 @@ bool IFilter.IsConditionless
5664
{
5765
get
5866
{
59-
return ((IScriptFilter)this).Script.IsNullOrEmpty();
67+
return this.Self.Script.IsNullOrEmpty();
6068
}
6169
}
6270

6371
/// <summary>
64-
/// Filter script.
72+
/// Inline script to execute
6573
/// </summary>
66-
/// <param name="script">script</param>
67-
/// <returns>this</returns>
6874
public ScriptFilterDescriptor Script(string script)
6975
{
70-
((IScriptFilter)this).Script = script;
76+
this.Self.Script = script;
7177
return this;
7278
}
7379

7480
/// <summary>
75-
/// Indexed script can be referenced by script id
76-
/// </summary>
77-
/// <param name="scriptId">Indexed script id</param>
78-
/// <returns>this</returns>
81+
/// Id of an indexed script to execute
82+
/// </summary
7983
public ScriptFilterDescriptor ScriptId(string scriptId)
8084
{
8185
scriptId.ThrowIfNull("scriptId");
82-
((IScriptFilter)this).ScriptId = scriptId;
86+
this.Self.ScriptId = scriptId;
8387
return this;
8488
}
8589

90+
/// <summary>
91+
/// File name of a script to execute
92+
/// </summary>
93+
public ScriptFilterDescriptor ScriptFile(string scriptFile)
94+
{
95+
scriptFile.ThrowIfNull("scriptFile");
96+
this.Self.ScriptFile = scriptFile;
97+
return this;
98+
}
99+
86100
/// <summary>
87101
/// Scripts are compiled and cached for faster execution.
88102
/// If the same script can be used, just with different parameters provider,
@@ -96,7 +110,7 @@ public ScriptFilterDescriptor ScriptId(string scriptId)
96110
public ScriptFilterDescriptor Params(Func<FluentDictionary<string, object>, FluentDictionary<string, object>> paramDictionary)
97111
{
98112
paramDictionary.ThrowIfNull("paramDictionary");
99-
((IScriptFilter)this).Params = paramDictionary(new FluentDictionary<string, object>());
113+
this.Self.Params = paramDictionary(new FluentDictionary<string, object>());
100114
return this;
101115
}
102116

@@ -108,7 +122,7 @@ public ScriptFilterDescriptor Params(Func<FluentDictionary<string, object>, Flue
108122
public ScriptFilterDescriptor Lang(string lang)
109123
{
110124
lang.ThrowIfNull("lang");
111-
((IScriptFilter)this).Lang = lang;
125+
this.Self.Lang = lang;
112126
return this;
113127
}
114128

@@ -120,7 +134,7 @@ public ScriptFilterDescriptor Lang(string lang)
120134
public ScriptFilterDescriptor Lang(ScriptLang lang)
121135
{
122136
lang.ThrowIfNull("lang");
123-
((IScriptFilter)this).Lang = lang.GetStringValue();
137+
this.Self.Lang = lang.GetStringValue();
124138
return this;
125139
}
126140
}

Diff for: src/Tests/Nest.Tests.Unit/Search/ScriptFields/ScriptFieldTests.cs

+19
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,24 @@ public void TestIndexedScriptFieldWithScriptLangEnum()
8282

8383
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
8484
}
85+
86+
[Test]
87+
public void TestScriptFile()
88+
{
89+
var s = new SearchDescriptor<ElasticsearchProject>()
90+
.From(0)
91+
.Size(10)
92+
.ScriptFields(sf => sf
93+
.Add("test1", sff => sff
94+
.ScriptFile("my_script")
95+
.Lang("groovy")
96+
.Params(sp => sp
97+
.Add("multiplier", 4)
98+
)
99+
)
100+
);
101+
102+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
103+
}
85104
}
86105
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"from": 0,
3+
"size": 10,
4+
"script_fields": {
5+
"test1": {
6+
"script_file": "my_script",
7+
"lang" : "groovy",
8+
"params": {
9+
"multiplier": 4
10+
}
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)