Skip to content

Commit 31bb3c6

Browse files
Mpdreamzrusscam
authored andcommitted
add mode to keep_types token filter (#3429)
1 parent 657481c commit 31bb3c6

File tree

4 files changed

+55
-20
lines changed

4 files changed

+55
-20
lines changed
Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,63 @@
11
using System.Collections.Generic;
2+
using System.Runtime.Serialization;
23
using Newtonsoft.Json;
4+
using Newtonsoft.Json.Converters;
35

46
namespace Nest
57
{
8+
[JsonConverter(typeof(StringEnumConverter))]
9+
public enum KeepTypesMode
10+
{
11+
[EnumMember(Value="include")]
12+
Include,
13+
[EnumMember(Value = "exclude")]
14+
Exclude
15+
}
16+
617
/// <summary>
718
/// A token filter of type keep that only keeps tokens with text contained in a predefined set of words.
819
/// </summary>
920
public interface IKeepTypesTokenFilter : ITokenFilter
1021
{
11-
/// <summary>
12-
/// A list of types to keep.
13-
/// </summary>
22+
/// <summary> A list of types to keep. </summary>
1423
[JsonProperty("types")]
1524
IEnumerable<string> Types { get; set; }
25+
26+
/// <summary> Whether to include or exclude the types provided on <see cref="Types"/> </summary>
27+
[JsonProperty("mode")]
28+
KeepTypesMode? Mode { get; set; }
1629
}
17-
/// <inheritdoc/>
30+
/// <inheritdoc cref="IKeepTypesTokenFilter"/>
1831
public class KeepTypesTokenFilter : TokenFilterBase
1932
{
2033
public KeepTypesTokenFilter() : base("keep_types") { }
2134

22-
/// <inheritdoc/>
35+
/// <inheritdoc cref="IKeepTypesTokenFilter.Types"/>
2336
public IEnumerable<string> Types { get; set; }
2437

38+
/// <inheritdoc cref="IKeepTypesTokenFilter.Mode"/>
39+
public KeepTypesMode? Mode { get; set; }
40+
2541
}
26-
///<inheritdoc/>
27-
public class KeepTypesTokenFilterDescriptor
42+
/// <inheritdoc cref="IKeepTypesTokenFilter"/>
43+
public class KeepTypesTokenFilterDescriptor
2844
: TokenFilterDescriptorBase<KeepTypesTokenFilterDescriptor, IKeepTypesTokenFilter>, IKeepTypesTokenFilter
2945
{
3046
protected override string Type => "keep_types";
3147

3248
IEnumerable<string> IKeepTypesTokenFilter.Types { get; set; }
49+
KeepTypesMode? IKeepTypesTokenFilter.Mode { get; set; }
3350

34-
///<inheritdoc/>
51+
/// <inheritdoc cref="IKeepTypesTokenFilter.Types"/>
3552
public KeepTypesTokenFilterDescriptor Types(IEnumerable<string> types) => Assign(a => a.Types = types);
3653

37-
///<inheritdoc/>
54+
/// <inheritdoc cref="IKeepTypesTokenFilter.Types"/>
3855
public KeepTypesTokenFilterDescriptor Types(params string[] types) => Assign(a => a.Types = types);
3956

57+
/// <inheritdoc cref="IKeepTypesTokenFilter.Mode"/>
58+
public KeepTypesTokenFilterDescriptor Mode(KeepTypesMode? mode) => Assign(a => a.Mode = mode);
59+
60+
4061
}
4162

42-
}
63+
}

src/Tests/Tests/Analysis/TokenFilters/TokenFilterTests.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,33 @@ public class KeepTypesTests : TokenFilterAssertionBase<KeepTypesTests>
182182
{
183183
public override string Name => "keeptypes";
184184

185-
public override ITokenFilter Initializer =>
186-
new KeepTypesTokenFilter {Types = new[] {"<NUM>", "<SOMETHINGELSE>"}};
185+
private readonly string[] _types = {"<NUM>", "<SOMETHINGELSE>"};
187186

188-
public override FuncTokenFilters Fluent => (n, tf) => tf
189-
.KeepTypes(n, t => t
190-
.Types("<NUM>", "<SOMETHINGELSE>")
191-
);
187+
public override ITokenFilter Initializer => new KeepTypesTokenFilter {Types = _types};
192188

193-
public override object Json => new
189+
public override FuncTokenFilters Fluent => (n, tf) => tf.KeepTypes(n, t => t.Types(_types));
190+
191+
public override object Json => new { type = "keep_types", types = _types };
192+
}
193+
194+
[SkipVersion("<6.4.0", "The mode option was introduced in https://github.com/elastic/elasticsearch/pull/32012")]
195+
public class KeepTypesModeTests : TokenFilterAssertionBase<KeepTypesTests>
196+
{
197+
public override string Name => "keeptypes";
198+
private readonly string[] _types = {"<NUM>", "<SOMETHINGELSE>"};
199+
200+
public override ITokenFilter Initializer => new KeepTypesTokenFilter
194201
{
195-
type = "keep_types",
196-
types = new[] {"<NUM>", "<SOMETHINGELSE>"}
202+
Mode = KeepTypesMode.Exclude,
203+
Types = _types
197204
};
198205

206+
public override FuncTokenFilters Fluent => (n, tf) => tf.KeepTypes(n, t => t
207+
.Mode(KeepTypesMode.Exclude)
208+
.Types(_types)
209+
);
210+
211+
public override object Json => new { type = "keep_types", types = _types, mode = "exclude" };
199212
}
200213

201214
public class IcuCollationTests : TokenFilterAssertionBase<IcuCollationTests>

src/Tests/Tests/Analysis/Tokenizers/TokenizerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public class StandardTests : TokenizerAssertionBase<StandardTests>
203203

204204
public override object Json => new {type = "standard"};
205205
}
206-
206+
207207
public class CharGroupTests : TokenizerAssertionBase<CharGroupTests>
208208
{
209209
private readonly string[] _chars = {"whitespace", "-", "\n"};

src/Tests/Tests/Mapping/Types/Core/Keyword/KeywordPropertyTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Elastic.Xunit.XunitPlumbing;
33
using Nest;
44
using Tests.Analysis;
5+
using Tests.Analysis.Tokenizers;
56
using Tests.Core.ManagedElasticsearch.Clusters;
67
using Tests.Domain;
78
using Tests.Framework.Integration;

0 commit comments

Comments
 (0)