Skip to content

Commit 0b8d9e2

Browse files
committed
added missing null_value and existence properties to missing filter fix #796
1 parent 66d2f00 commit 0b8d9e2

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

src/Nest/DSL/Filter/FilterDescriptor.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,23 +89,28 @@ public FilterContainer Exists(string field)
8989
/// <summary>
9090
/// Filters documents where a specific field has no value in them.
9191
/// </summary>
92-
public FilterContainer Missing(Expression<Func<T, object>> fieldDescriptor)
92+
public FilterContainer Missing(Expression<Func<T, object>> fieldDescriptor, Action<MissingFilterDescriptor> selector = null)
9393
{
94-
IMissingFilter filter = new MissingFilterDescriptor();
94+
var mf = new MissingFilterDescriptor();
95+
if (selector != null) selector(mf);
96+
IMissingFilter filter = mf;
9597
filter.Field = fieldDescriptor;
9698
this.SetCacheAndName(filter);
9799
return this.New(filter, f => f.Missing = filter);
98100
}
99101
/// <summary>
100102
/// Filters documents where a specific field has no value in them.
101103
/// </summary>
102-
public FilterContainer Missing(string field)
104+
public FilterContainer Missing(string field, Action<MissingFilterDescriptor> selector = null)
103105
{
104-
IMissingFilter filter = new MissingFilterDescriptor();
106+
var mf = new MissingFilterDescriptor();
107+
if (selector != null) selector(mf);
108+
IMissingFilter filter = mf;
105109
filter.Field = field;
106110
this.SetCacheAndName(filter);
107111
return this.New(filter, f => f.Missing = filter);
108112
}
113+
109114
/// <summary>
110115
/// Filters documents that only have the provided ids.
111116
/// Note, this filter does not require the _id field to be indexed since it works using the _uid field.

src/Nest/DSL/Filter/MissingFilterDescriptor.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Linq.Expressions;
45
using Nest.Resolvers.Converters;
56
using Newtonsoft.Json;
67

@@ -12,6 +13,12 @@ public interface IMissingFilter : IFilter
1213
{
1314
[JsonProperty(PropertyName = "field")]
1415
PropertyPathMarker Field { get; set; }
16+
17+
[JsonProperty(PropertyName = "existence")]
18+
bool? Existence { get; set; }
19+
20+
[JsonProperty(PropertyName = "null_value")]
21+
bool? NullValue { get; set; }
1522
}
1623

1724
public class MissingFilter : PlainFilter, IMissingFilter
@@ -22,6 +29,10 @@ protected internal override void WrapInContainer(IFilterContainer container)
2229
}
2330

2431
public PropertyPathMarker Field { get; set; }
32+
33+
public bool? Existence { get; set; }
34+
35+
public bool? NullValue { get; set; }
2536
}
2637

2738
public class MissingFilterDescriptor : FilterBase, IMissingFilter
@@ -35,6 +46,22 @@ bool IFilter.IsConditionless
3546

3647
}
3748

49+
private IMissingFilter Self { get { return this; } }
50+
3851
PropertyPathMarker IMissingFilter.Field { get; set;}
52+
bool? IMissingFilter.Existence { get; set; }
53+
bool? IMissingFilter.NullValue { get; set; }
54+
55+
public MissingFilterDescriptor Existence(bool existence = true)
56+
{
57+
Self.Existence = existence;
58+
return this;
59+
}
60+
61+
public MissingFilterDescriptor NullValue(bool nullValue = true)
62+
{
63+
Self.NullValue = nullValue;
64+
return this;
65+
}
3966
}
4067
}

src/Tests/Nest.Tests.Unit/QueryParsers/Filter/MissingFilterTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ public void Missing_Deserializes(string cacheName, string cacheKey, bool cache)
1212
{
1313
var missingFilter = this.SerializeThenDeserialize(cacheName, cacheKey, cache,
1414
f=>f.Missing,
15-
f=>f.Missing(p=>p.Name)
15+
f=>f.Missing(p=>p.Name, m=>m.Existence(false).NullValue(true))
1616
);
1717

1818
missingFilter.Field.Should().Be("name");
19+
missingFilter.Existence.Should().Be(false);
20+
missingFilter.NullValue.Should().Be(true);
1921
}
2022

2123
}

0 commit comments

Comments
 (0)