@@ -31,13 +31,13 @@ public abstract class SearchDescriptorBase
3131 public class SearchDescriptor < T > : SearchDescriptorBase where T : class
3232 {
3333 private readonly TypeNameResolver typeNameResolver ;
34-
34+
3535 public SearchDescriptor ( )
3636 {
3737 this . typeNameResolver = new TypeNameResolver ( ) ;
3838 }
3939
40-
40+
4141 internal override Type _ClrType { get { return typeof ( T ) ; } }
4242 internal Func < dynamic , Hit < dynamic > , Type > _ConcreteTypeSelector ;
4343
@@ -71,7 +71,7 @@ public SearchDescriptor<T> Index(string index)
7171 public SearchDescriptor < T > Types ( IEnumerable < string > types )
7272 {
7373 types . ThrowIfEmpty ( "types" ) ;
74- this . _Types = types . Select ( s=> ( TypeNameMarker ) s ) ;
74+ this . _Types = types . Select ( s => ( TypeNameMarker ) s ) ;
7575 return this ;
7676 }
7777 /// <summary>
@@ -91,7 +91,7 @@ public SearchDescriptor<T> Types(IEnumerable<Type> types)
9191 types . ThrowIfEmpty ( "types" ) ;
9292 this . _Types = types . Select ( s => ( TypeNameMarker ) s ) ;
9393 return this ;
94-
94+
9595 }
9696 /// <summary>
9797 /// The types to execute the search on. Defaults to the inferred typename of T
@@ -200,6 +200,9 @@ public SearchDescriptor<T> Strict(bool strict = true)
200200 [ JsonProperty ( PropertyName = "facets" ) ]
201201 internal IDictionary < string , FacetDescriptorsBucket < T > > _Facets { get ; set ; }
202202
203+ [ JsonProperty ( PropertyName = "suggest" ) ]
204+ internal IDictionary < string , SuggestDescriptorBucket < T > > _Suggest { get ; set ; }
205+
203206 [ JsonProperty ( PropertyName = "query" ) ]
204207 internal RawOrQueryDescriptor < T > _QueryOrRaw
205208 {
@@ -246,10 +249,10 @@ internal RawOrFilterDescriptor<T> _FilterOrRaw
246249 internal IList < string > _Fields { get ; set ; }
247250
248251 [ JsonProperty ( PropertyName = "script_fields" ) ]
249- internal FluentDictionary < string , ScriptFilterDescriptor > _ScriptFields { get ; set ; }
252+ internal FluentDictionary < string , ScriptFilterDescriptor > _ScriptFields { get ; set ; }
250253
251- [ JsonProperty ( PropertyName = "partial_fields" ) ]
252- internal Dictionary < string , PartialFieldDescriptor < T > > _PartialFields { get ; set ; }
254+ [ JsonProperty ( PropertyName = "partial_fields" ) ]
255+ internal Dictionary < string , PartialFieldDescriptor < T > > _PartialFields { get ; set ; }
253256
254257 /// <summary>
255258 /// The number of hits to return. Defaults to 10. When using scroll search type
@@ -440,30 +443,30 @@ public SearchDescriptor<T> ScriptFields(
440443 return this ;
441444 }
442445
443- public SearchDescriptor < T > PartialFields ( params Action < PartialFieldDescriptor < T > > [ ] partialFieldDescriptor )
444- {
445- if ( this . _PartialFields == null )
446- this . _PartialFields = new Dictionary < string , PartialFieldDescriptor < T > > ( ) ;
446+ public SearchDescriptor < T > PartialFields ( params Action < PartialFieldDescriptor < T > > [ ] partialFieldDescriptor )
447+ {
448+ if ( this . _PartialFields == null )
449+ this . _PartialFields = new Dictionary < string , PartialFieldDescriptor < T > > ( ) ;
447450
448- var descriptors = new List < PartialFieldDescriptor < T > > ( ) ;
451+ var descriptors = new List < PartialFieldDescriptor < T > > ( ) ;
449452
450- foreach ( var selector in partialFieldDescriptor )
451- {
452- var filter = new PartialFieldDescriptor < T > ( ) ;
453- selector ( filter ) ;
454- descriptors . Add ( filter ) ;
455- }
453+ foreach ( var selector in partialFieldDescriptor )
454+ {
455+ var filter = new PartialFieldDescriptor < T > ( ) ;
456+ selector ( filter ) ;
457+ descriptors . Add ( filter ) ;
458+ }
456459
457- foreach ( var d in descriptors )
458- {
459- var key = d . _Field ;
460- if ( string . IsNullOrEmpty ( key ) )
461- throw new DslException ( "Could not infer key for highlight field descriptor" ) ;
460+ foreach ( var d in descriptors )
461+ {
462+ var key = d . _Field ;
463+ if ( string . IsNullOrEmpty ( key ) )
464+ throw new DslException ( "Could not infer key for highlight field descriptor" ) ;
462465
463- this . _PartialFields . Add ( key , d ) ;
464- }
465- return this ;
466- }
466+ this . _PartialFields . Add ( key , d ) ;
467+ }
468+ return this ;
469+ }
467470
468471 /// <summary>
469472 /// <para>Allows to add one or more sort on specific fields. Each sort can be reversed as well.
@@ -836,6 +839,32 @@ public SearchDescriptor<T> FacetFilter(string name, Func<FilterDescriptor<T>, Ba
836839 return this ;
837840 }
838841
842+ public SearchDescriptor < T > TermSuggest ( string name , Func < TermSuggestDescriptor < T > , TermSuggestDescriptor < T > > suggest )
843+ {
844+ name . ThrowIfNullOrEmpty ( "name" ) ;
845+ suggest . ThrowIfNull ( "suggest" ) ;
846+ if ( this . _Suggest == null )
847+ this . _Suggest = new Dictionary < string , SuggestDescriptorBucket < T > > ( ) ;
848+ TermSuggestDescriptor < T > desc = new TermSuggestDescriptor < T > ( ) ;
849+ TermSuggestDescriptor < T > item = suggest ( desc ) ;
850+ SuggestDescriptorBucket < T > bucket = new SuggestDescriptorBucket < T > { _Text = item . _Text , TermSuggest = item } ;
851+ this . _Suggest . Add ( name , bucket ) ;
852+ return this ;
853+ }
854+
855+ public SearchDescriptor < T > PhraseSuggest ( string name , Func < PhraseSuggestDescriptor < T > , PhraseSuggestDescriptor < T > > suggest )
856+ {
857+ name . ThrowIfNullOrEmpty ( "name" ) ;
858+ suggest . ThrowIfNull ( "suggest" ) ;
859+ if ( this . _Suggest == null )
860+ this . _Suggest = new Dictionary < string , SuggestDescriptorBucket < T > > ( ) ;
861+ PhraseSuggestDescriptor < T > desc = new PhraseSuggestDescriptor < T > ( ) ;
862+ PhraseSuggestDescriptor < T > item = suggest ( desc ) ;
863+ SuggestDescriptorBucket < T > bucket = new SuggestDescriptorBucket < T > { _Text = item . _Text , PhraseSuggest = item } ;
864+ this . _Suggest . Add ( name , bucket ) ;
865+ return this ;
866+ }
867+
839868 /// <summary>
840869 /// Describe the query to perform using a query descriptor lambda
841870 /// </summary>
0 commit comments