Skip to content

Commit 10fca28

Browse files
committed
Fix #1514: HasParentFilter missing Filter
1 parent d5fb3da commit 10fca28

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

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

+17-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public interface IHasParentFilter : IFilter
1717
[JsonConverter(typeof(CompositeJsonConverter<ReadAsTypeConverter<QueryDescriptor<object>>, CustomJsonConverter>))]
1818
IQueryContainer Query { get; set; }
1919

20+
[JsonProperty("filter")]
21+
[JsonConverter(typeof(CompositeJsonConverter<ReadAsTypeConverter<FilterDescriptor<object>>, CustomJsonConverter>))]
22+
IFilterContainer Filter { get; set; }
23+
2024
[JsonProperty("inner_hits")]
2125
[JsonConverter(typeof(ReadAsTypeConverter<InnerHits>))]
2226
IInnerHits InnerHits { get; set; }
@@ -32,6 +36,7 @@ protected internal override void WrapInContainer(IFilterContainer container)
3236

3337
public TypeNameMarker Type { get; set; }
3438
public IQueryContainer Query { get; set; }
39+
public IFilterContainer Filter { get; set; }
3540
public IInnerHits InnerHits { get; set; }
3641
}
3742

@@ -43,15 +48,17 @@ public class HasParentFilterDescriptor<T> : FilterBase, IHasParentFilter where T
4348

4449
IQueryContainer IHasParentFilter.Query { get; set; }
4550

51+
IFilterContainer IHasParentFilter.Filter { get; set; }
52+
4653
IInnerHits IHasParentFilter.InnerHits { get; set; }
4754

4855
bool IFilter.IsConditionless
4956
{
5057
get
5158
{
52-
return Self.Query == null
53-
|| Self.Query.IsConditionless
54-
|| Self.Type.IsNullOrEmpty();
59+
return Self.Type.IsNullOrEmpty()
60+
|| ((Self.Query == null || Self.Query.IsConditionless)
61+
&& (Self.Filter == null || Self.Filter.IsConditionless));
5562
}
5663
}
5764

@@ -67,6 +74,13 @@ public HasParentFilterDescriptor<T> Query(Func<QueryDescriptor<T>, QueryContaine
6774
return this;
6875
}
6976

77+
public HasParentFilterDescriptor<T> Filter(Func<FilterDescriptor<T>, FilterContainer> filterSelector)
78+
{
79+
var f = new FilterDescriptor<T>();
80+
Self.Filter = filterSelector(f);
81+
return this;
82+
}
83+
7084
public HasParentFilterDescriptor<T> Type(string type)
7185
{
7286
Self.Type = type;

Diff for: src/Tests/Nest.Tests.Unit/QueryParsers/Filter/HasParentFilterTests.cs

+19-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class HasParentFilterTests : ParseFilterTestsBase
99
{
1010
[Test]
1111
[TestCase("cacheName", "cacheKey", true)]
12-
public void HasParent_Deserializes(string cacheName, string cacheKey, bool cache)
12+
public void HasParent_Query_Deserializes(string cacheName, string cacheKey, bool cache)
1313
{
1414
var hasParentFilter = this.SerializeThenDeserialize(cacheName, cacheKey, cache,
1515
f=>f.HasParent,
@@ -24,6 +24,23 @@ public void HasParent_Deserializes(string cacheName, string cacheKey, bool cache
2424
query.Should().NotBeNull();
2525
query.Term.Field.Should().Be("country");
2626
}
27-
27+
28+
[Test]
29+
[TestCase("cacheName", "cacheKey", true)]
30+
public void HasParent_Filter_Deserializes(string cacheName, string cacheKey, bool cache)
31+
{
32+
var hasParentFilter = this.SerializeThenDeserialize(cacheName, cacheKey, cache,
33+
f=>f.HasParent,
34+
f=>f.HasParent<ElasticsearchProject>(d=>d
35+
.InnerHits()
36+
.Filter(pf=>pf.Term(p=>p.Country,"value"))
37+
)
38+
);
39+
hasParentFilter.InnerHits.Should().NotBeNull();
40+
41+
var filter = hasParentFilter.Filter;
42+
filter.Should().NotBeNull();
43+
filter.Term.Field.Should().Be("country");
44+
}
2845
}
2946
}

0 commit comments

Comments
 (0)