Skip to content

Commit 53797d1

Browse files
yevhenMpdreamz
authored andcommitted
Extend query DSL with SpanFieldMaskingQuery (#2231)
1 parent b24805a commit 53797d1

File tree

8 files changed

+131
-1
lines changed

8 files changed

+131
-1
lines changed

src/Nest/DSL/Query/IQueryContainer.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ public interface IQueryContainer : ICustomJson
128128
[JsonProperty(PropertyName = "span_multi")]
129129
ISpanMultiTermQuery SpanMultiTerm { get; set; }
130130

131+
[JsonProperty(PropertyName = "field_masking_span")]
132+
ISpanFieldMaskingQuery SpanFieldMasking { get; set; }
133+
131134
[JsonProperty(PropertyName = "top_children")]
132135
ITopChildrenQuery TopChildren { get; set; }
133136

src/Nest/DSL/Query/QueryContainer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public class QueryContainer : IQueryContainer
7979

8080
ISpanMultiTermQuery IQueryContainer.SpanMultiTerm { get; set; }
8181

82+
ISpanFieldMaskingQuery IQueryContainer.SpanFieldMasking { get; set; }
83+
8284
ITopChildrenQuery IQueryContainer.TopChildren { get; set; }
8385

8486
INestedQuery IQueryContainer.Nested { get; set; }
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
using System;
2+
using System.Linq.Expressions;
3+
4+
using Nest.DSL.Query.Behaviour;
5+
using Nest.Resolvers.Converters;
6+
using Newtonsoft.Json;
7+
8+
namespace Nest
9+
{
10+
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
11+
[JsonConverter(typeof(ReadAsTypeConverter<SpanFieldMaskingQueryDescriptor<object>>))]
12+
public interface ISpanFieldMaskingQuery : ISpanSubQuery, IFieldNameQuery
13+
{
14+
[JsonProperty(PropertyName = "field")]
15+
PropertyPathMarker Field { get; set; }
16+
17+
[JsonProperty(PropertyName = "query")]
18+
ISpanQuery Query { get; set; }
19+
}
20+
21+
public class SpanFieldMaskingQuery : PlainQuery, ISpanFieldMaskingQuery
22+
{
23+
protected override void WrapInContainer(IQueryContainer container)
24+
{
25+
container.SpanFieldMasking = this;
26+
}
27+
28+
bool IQuery.IsConditionless { get { return false; } }
29+
30+
public string Name { get; set; }
31+
public PropertyPathMarker Field { get; set; }
32+
public ISpanQuery Query { get; set; }
33+
34+
PropertyPathMarker IFieldNameQuery.GetFieldName()
35+
{
36+
return this.Field;
37+
}
38+
39+
void IFieldNameQuery.SetFieldName(string fieldName)
40+
{
41+
this.Field = fieldName;
42+
}
43+
}
44+
45+
public class SpanFieldMaskingQueryDescriptor<T> : ISpanFieldMaskingQuery where T : class
46+
{
47+
ISpanFieldMaskingQuery Self { get { return this; } }
48+
bool IQuery.IsConditionless { get { return false; } }
49+
50+
ISpanQuery ISpanFieldMaskingQuery.Query { get; set; }
51+
PropertyPathMarker ISpanFieldMaskingQuery.Field { get; set; }
52+
string IQuery.Name { get; set; }
53+
54+
public SpanFieldMaskingQueryDescriptor<T> Name(string name)
55+
{
56+
Self.Name = name;
57+
return this;
58+
}
59+
60+
public SpanFieldMaskingQueryDescriptor<T> Query(Func<SpanQuery<T>, SpanQuery<T>> selector)
61+
{
62+
if (selector == null) return this;
63+
var span = new SpanQuery<T>();
64+
Self.Query = selector(span); ;
65+
return this;
66+
}
67+
68+
public SpanFieldMaskingQueryDescriptor<T> OnField(string field)
69+
{
70+
Self.Field = field;
71+
return this;
72+
}
73+
74+
public SpanFieldMaskingQueryDescriptor<T> OnField(Expression<Func<T, object>> field)
75+
{
76+
Self.Field = field;
77+
return this;
78+
}
79+
80+
public SpanFieldMaskingQueryDescriptor<T> OnField<K>(Expression<Func<T, K>> field)
81+
{
82+
Self.Field = field;
83+
return this;
84+
}
85+
86+
public PropertyPathMarker GetFieldName()
87+
{
88+
return Self.Field;
89+
}
90+
91+
public void SetFieldName(string fieldName)
92+
{
93+
Self.Field = fieldName;
94+
}
95+
}
96+
}

src/Nest/DSL/Query/SpanQueryDescriptor.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public interface ISpanQuery : IQuery
2828

2929
[JsonProperty(PropertyName = "span_multi")]
3030
ISpanMultiTermQuery SpanMultiTerm { get; set; }
31+
32+
[JsonProperty(PropertyName = "field_masking_span")]
33+
ISpanFieldMaskingQuery SpanFieldMasking { get; set; }
3134
}
3235

3336
public class SpanQuery : ISpanQuery
@@ -40,6 +43,7 @@ public class SpanQuery : ISpanQuery
4043
public ISpanOrQuery SpanOr { get; set; }
4144
public ISpanNotQuery SpanNot { get; set; }
4245
public ISpanMultiTermQuery SpanMultiTerm { get; set; }
46+
public ISpanFieldMaskingQuery SpanFieldMasking { get; set; }
4347
}
4448

4549
public class SpanQuery<T> : ISpanQuery where T : class
@@ -58,6 +62,8 @@ public class SpanQuery<T> : ISpanQuery where T : class
5862

5963
ISpanMultiTermQuery ISpanQuery.SpanMultiTerm { get; set; }
6064

65+
ISpanFieldMaskingQuery ISpanQuery.SpanFieldMasking { get; set; }
66+
6167
string IQuery.Name { get; set; }
6268

6369
bool IQuery.IsConditionless
@@ -71,7 +77,8 @@ bool IQuery.IsConditionless
7177
Self.SpanNear as IQuery,
7278
Self.SpanOr as IQuery,
7379
Self.SpanNot as IQuery,
74-
Self.SpanMultiTerm as IQuery
80+
Self.SpanMultiTerm as IQuery,
81+
Self.SpanFieldMasking as IQuery
7582
};
7683
return queries.All(q => q == null || q.IsConditionless);
7784
}
@@ -134,6 +141,12 @@ public SpanQuery<T> SpanMultiTerm(Func<SpanMultiTermQueryDescriptor<T>, SpanMult
134141
var q= selector(new SpanMultiTermQueryDescriptor<T>());
135142
return CreateQuery(q, (sq) => sq.SpanMultiTerm = q);
136143
}
144+
public SpanQuery<T> SpanFieldMasking(Func<SpanFieldMaskingQueryDescriptor<T>, SpanFieldMaskingQueryDescriptor<T>> selector)
145+
{
146+
selector.ThrowIfNull("selector");
147+
var q= selector(new SpanFieldMaskingQueryDescriptor<T>());
148+
return CreateQuery(q, (sq) => sq.SpanFieldMasking = q);
149+
}
137150

138151
private SpanQuery<T> CreateQuery<K>(K query, Action<ISpanQuery> setProperty) where K : ISpanSubQuery
139152
{

src/Nest/DSL/Visitor/DslPrettyPrintVisitor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,11 @@ public virtual void Visit(ISpanTermQuery query)
230230
Write("span_term");
231231
}
232232

233+
public virtual void Visit(ISpanFieldMaskingQuery query)
234+
{
235+
Write("field_masking_span");
236+
}
237+
233238
public virtual void Visit(ITermQuery query)
234239
{
235240
Write("term", query.Field);

src/Nest/DSL/Visitor/QueryVisitor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public interface IQueryVisitor
6868
void Visit(ISpanNotQuery query);
6969
void Visit(ISpanOrQuery query);
7070
void Visit(ISpanTermQuery query);
71+
void Visit(ISpanFieldMaskingQuery query);
7172
void Visit(ITermQuery query);
7273
void Visit(IWildcardQuery query);
7374
void Visit(ITermsQuery query);
@@ -259,6 +260,10 @@ public virtual void Visit(ISpanTermQuery customFiltersScore)
259260
{
260261
}
261262

263+
public virtual void Visit(ISpanFieldMaskingQuery customFiltersScore)
264+
{
265+
}
266+
262267
public virtual void Visit(ITermQuery customFiltersScore)
263268
{
264269
}

src/Nest/Nest.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<Compile Include="DSL\FieldStatsDescriptor.cs" />
244244
<Compile Include="DSL\Filter\IndicesFilterDescriptor.cs" />
245245
<Compile Include="Domain\DSL\NoMatchShortcut.cs" />
246+
<Compile Include="DSL\Query\SpanFieldMaskingQueryDescriptor.cs" />
246247
<Compile Include="DSL\SyncedFlushDescriptor.cs" />
247248
<Compile Include="DSL\Query\Functions\WeightFunction.cs" />
248249
<Compile Include="DSL\Search\IGlobalInnerHit.cs" />

src/Tests/Nest.Tests.Unit/QueryParsers/Visitor/DslPrettyPrintVisitor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,11 @@ public virtual void Visit(ISpanTermQuery query)
236236
Write("span_term");
237237
}
238238

239+
public virtual void Visit(ISpanFieldMaskingQuery query)
240+
{
241+
Write("field_masking_span");
242+
}
243+
239244
public virtual void Visit(ITermQuery query)
240245
{
241246
Write("term", query.Field);

0 commit comments

Comments
 (0)