@@ -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
@@ -203,6 +203,9 @@ public SearchDescriptor<T> Strict(bool strict = true)
203203 [ JsonConverter ( typeof ( DictionaryKeysAreNotPropertyNamesJsonConverter ) ) ]
204204 internal IDictionary < string , FacetDescriptorsBucket < T > > _Facets { get ; set ; }
205205
206+ [ JsonProperty ( PropertyName = "suggest" ) ]
207+ internal IDictionary < string , SuggestDescriptorBucket < T > > _Suggest { get ; set ; }
208+
206209 [ JsonProperty ( PropertyName = "query" ) ]
207210 internal RawOrQueryDescriptor < T > _QueryOrRaw
208211 {
@@ -252,7 +255,7 @@ internal RawOrFilterDescriptor<T> _FilterOrRaw
252255 [ JsonConverter ( typeof ( DictionaryKeysAreNotPropertyNamesJsonConverter ) ) ]
253256 internal FluentDictionary < string , ScriptFilterDescriptor > _ScriptFields { get ; set ; }
254257
255- [ JsonProperty ( PropertyName = "partial_fields" ) ]
258+ [ JsonProperty ( PropertyName = "partial_fields" ) ]
256259 [ JsonConverter ( typeof ( DictionaryKeysAreNotPropertyNamesJsonConverter ) ) ]
257260 internal Dictionary < string , PartialFieldDescriptor < T > > _PartialFields { get ; set ; }
258261
@@ -445,30 +448,30 @@ public SearchDescriptor<T> ScriptFields(
445448 return this ;
446449 }
447450
448- public SearchDescriptor < T > PartialFields ( params Action < PartialFieldDescriptor < T > > [ ] partialFieldDescriptor )
449- {
450- if ( this . _PartialFields == null )
451- this . _PartialFields = new Dictionary < string , PartialFieldDescriptor < T > > ( ) ;
451+ public SearchDescriptor < T > PartialFields ( params Action < PartialFieldDescriptor < T > > [ ] partialFieldDescriptor )
452+ {
453+ if ( this . _PartialFields == null )
454+ this . _PartialFields = new Dictionary < string , PartialFieldDescriptor < T > > ( ) ;
452455
453- var descriptors = new List < PartialFieldDescriptor < T > > ( ) ;
456+ var descriptors = new List < PartialFieldDescriptor < T > > ( ) ;
454457
455- foreach ( var selector in partialFieldDescriptor )
456- {
457- var filter = new PartialFieldDescriptor < T > ( ) ;
458- selector ( filter ) ;
459- descriptors . Add ( filter ) ;
460- }
458+ foreach ( var selector in partialFieldDescriptor )
459+ {
460+ var filter = new PartialFieldDescriptor < T > ( ) ;
461+ selector ( filter ) ;
462+ descriptors . Add ( filter ) ;
463+ }
461464
462- foreach ( var d in descriptors )
463- {
464- var key = d . _Field ;
465- if ( string . IsNullOrEmpty ( key ) )
466- throw new DslException ( "Could not infer key for highlight field descriptor" ) ;
465+ foreach ( var d in descriptors )
466+ {
467+ var key = d . _Field ;
468+ if ( string . IsNullOrEmpty ( key ) )
469+ throw new DslException ( "Could not infer key for highlight field descriptor" ) ;
467470
468- this . _PartialFields . Add ( key , d ) ;
469- }
470- return this ;
471- }
471+ this . _PartialFields . Add ( key , d ) ;
472+ }
473+ return this ;
474+ }
472475
473476 /// <summary>
474477 /// <para>Allows to add one or more sort on specific fields. Each sort can be reversed as well.
@@ -841,6 +844,32 @@ public SearchDescriptor<T> FacetFilter(string name, Func<FilterDescriptor<T>, Ba
841844 return this ;
842845 }
843846
847+ public SearchDescriptor < T > TermSuggest ( string name , Func < TermSuggestDescriptor < T > , TermSuggestDescriptor < T > > suggest )
848+ {
849+ name . ThrowIfNullOrEmpty ( "name" ) ;
850+ suggest . ThrowIfNull ( "suggest" ) ;
851+ if ( this . _Suggest == null )
852+ this . _Suggest = new Dictionary < string , SuggestDescriptorBucket < T > > ( ) ;
853+ TermSuggestDescriptor < T > desc = new TermSuggestDescriptor < T > ( ) ;
854+ TermSuggestDescriptor < T > item = suggest ( desc ) ;
855+ SuggestDescriptorBucket < T > bucket = new SuggestDescriptorBucket < T > { _Text = item . _Text , TermSuggest = item } ;
856+ this . _Suggest . Add ( name , bucket ) ;
857+ return this ;
858+ }
859+
860+ public SearchDescriptor < T > PhraseSuggest ( string name , Func < PhraseSuggestDescriptor < T > , PhraseSuggestDescriptor < T > > suggest )
861+ {
862+ name . ThrowIfNullOrEmpty ( "name" ) ;
863+ suggest . ThrowIfNull ( "suggest" ) ;
864+ if ( this . _Suggest == null )
865+ this . _Suggest = new Dictionary < string , SuggestDescriptorBucket < T > > ( ) ;
866+ PhraseSuggestDescriptor < T > desc = new PhraseSuggestDescriptor < T > ( ) ;
867+ PhraseSuggestDescriptor < T > item = suggest ( desc ) ;
868+ SuggestDescriptorBucket < T > bucket = new SuggestDescriptorBucket < T > { _Text = item . _Text , PhraseSuggest = item } ;
869+ this . _Suggest . Add ( name , bucket ) ;
870+ return this ;
871+ }
872+
844873 /// <summary>
845874 /// Describe the query to perform using a query descriptor lambda
846875 /// </summary>
0 commit comments