@@ -28,6 +28,11 @@ public interface INestedFilter : IFilter
2828
2929 [ JsonProperty ( "join" ) ]
3030 bool ? Join { get ; set ; }
31+
32+ [ JsonProperty ( "inner_hits" ) ]
33+ [ JsonConverter ( typeof ( ReadAsTypeConverter < InnerHits > ) ) ]
34+ IInnerHits InnerHits { get ; set ; }
35+
3136 }
3237
3338 public class NestedFilter : PlainFilter , INestedFilter
@@ -41,11 +46,14 @@ protected internal override void WrapInContainer(IFilterContainer container)
4146 public IFilterContainer Filter { get ; set ; }
4247 public IQueryContainer Query { get ; set ; }
4348 public PropertyPathMarker Path { get ; set ; }
44- public bool ? Join { get ; set ; }
49+ public bool ? Join { get ; set ; }
50+ public IInnerHits InnerHits { get ; set ; }
4551 }
4652
4753 public class NestedFilterDescriptor < T > : FilterBase , INestedFilter where T : class
48- {
54+ {
55+ private INestedFilter Self { get { return this ; } }
56+
4957 NestedScore ? INestedFilter . Score { get ; set ; }
5058
5159 IFilterContainer INestedFilter . Filter { get ; set ; }
@@ -56,54 +64,67 @@ public class NestedFilterDescriptor<T> : FilterBase, INestedFilter where T : cla
5664
5765 bool ? INestedFilter . Join { get ; set ; }
5866
67+ IInnerHits INestedFilter . InnerHits { get ; set ; }
68+
5969 bool IFilter . IsConditionless
6070 {
6171 get
6272 {
63- return ( ( ( INestedFilter ) this ) . Query == null
64- || ( ( INestedFilter ) this ) . Query . IsConditionless )
65- && ( ( ( INestedFilter ) this ) . Filter == null
66- || ( ( INestedFilter ) this ) . Filter . IsConditionless )
67- ;
73+ return ( Self . Query == null || Self . Query . IsConditionless )
74+ && ( Self . Filter == null || Self . Filter . IsConditionless ) ;
6875 }
6976 }
7077
7178 public NestedFilterDescriptor < T > Filter ( Func < FilterDescriptor < T > , FilterContainer > filterSelector )
7279 {
7380 var q = new FilterDescriptor < T > ( ) ;
74- ( ( INestedFilter ) this ) . Filter = filterSelector ( q ) ;
81+ Self . Filter = filterSelector ( q ) ;
7582 return this ;
7683 }
7784
7885 public NestedFilterDescriptor < T > Query ( Func < QueryDescriptor < T > , QueryContainer > querySelector )
7986 {
8087 var q = new QueryDescriptor < T > ( ) ;
81- ( ( INestedFilter ) this ) . Query = querySelector ( q ) ;
88+ Self . Query = querySelector ( q ) ;
8289 return this ;
8390 }
8491
8592 public NestedFilterDescriptor < T > Score ( NestedScore score )
8693 {
87- ( ( INestedFilter ) this ) . Score = score ;
94+ Self . Score = score ;
8895 return this ;
8996 }
9097
9198 public NestedFilterDescriptor < T > Path ( string path )
9299 {
93- ( ( INestedFilter ) this ) . Path = path ;
100+ Self . Path = path ;
94101 return this ;
95102 }
96103
97104 public NestedFilterDescriptor < T > Join ( bool join = true )
98105 {
99- ( ( INestedFilter ) this ) . Join = join ;
106+ Self . Join = join ;
100107 return this ;
101108 }
102109
103110 public NestedFilterDescriptor < T > Path ( Expression < Func < T , object > > objectPath )
104111 {
105- ( ( INestedFilter ) this ) . Path = objectPath ;
112+ Self . Path = objectPath ;
106113 return this ;
107114 }
115+
116+ public NestedFilterDescriptor < T > InnerHits ( )
117+ {
118+ Self . InnerHits = new InnerHits ( ) ;
119+ return this ;
120+ }
121+
122+ public NestedFilterDescriptor < T > InnerHits ( Func < InnerHitsDescriptor < T > , IInnerHits > innerHitsSelector )
123+ {
124+ if ( innerHitsSelector == null ) return this ;
125+ Self . InnerHits = innerHitsSelector ( new InnerHitsDescriptor < T > ( ) ) ;
126+ return this ;
127+ }
128+
108129 }
109130}
0 commit comments