@@ -31,13 +31,13 @@ public abstract class SearchDescriptorBase
31
31
public class SearchDescriptor < T > : SearchDescriptorBase where T : class
32
32
{
33
33
private readonly TypeNameResolver typeNameResolver ;
34
-
34
+
35
35
public SearchDescriptor ( )
36
36
{
37
37
this . typeNameResolver = new TypeNameResolver ( ) ;
38
38
}
39
39
40
-
40
+
41
41
internal override Type _ClrType { get { return typeof ( T ) ; } }
42
42
internal Func < dynamic , Hit < dynamic > , Type > _ConcreteTypeSelector ;
43
43
@@ -71,7 +71,7 @@ public SearchDescriptor<T> Index(string index)
71
71
public SearchDescriptor < T > Types ( IEnumerable < string > types )
72
72
{
73
73
types . ThrowIfEmpty ( "types" ) ;
74
- this . _Types = types . Select ( s=> ( TypeNameMarker ) s ) ;
74
+ this . _Types = types . Select ( s => ( TypeNameMarker ) s ) ;
75
75
return this ;
76
76
}
77
77
/// <summary>
@@ -91,7 +91,7 @@ public SearchDescriptor<T> Types(IEnumerable<Type> types)
91
91
types . ThrowIfEmpty ( "types" ) ;
92
92
this . _Types = types . Select ( s => ( TypeNameMarker ) s ) ;
93
93
return this ;
94
-
94
+
95
95
}
96
96
/// <summary>
97
97
/// 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)
203
203
[ JsonConverter ( typeof ( DictionaryKeysAreNotPropertyNamesJsonConverter ) ) ]
204
204
internal IDictionary < string , FacetDescriptorsBucket < T > > _Facets { get ; set ; }
205
205
206
+ [ JsonProperty ( PropertyName = "suggest" ) ]
207
+ internal IDictionary < string , SuggestDescriptorBucket < T > > _Suggest { get ; set ; }
208
+
206
209
[ JsonProperty ( PropertyName = "query" ) ]
207
210
internal RawOrQueryDescriptor < T > _QueryOrRaw
208
211
{
@@ -252,7 +255,7 @@ internal RawOrFilterDescriptor<T> _FilterOrRaw
252
255
[ JsonConverter ( typeof ( DictionaryKeysAreNotPropertyNamesJsonConverter ) ) ]
253
256
internal FluentDictionary < string , ScriptFilterDescriptor > _ScriptFields { get ; set ; }
254
257
255
- [ JsonProperty ( PropertyName = "partial_fields" ) ]
258
+ [ JsonProperty ( PropertyName = "partial_fields" ) ]
256
259
[ JsonConverter ( typeof ( DictionaryKeysAreNotPropertyNamesJsonConverter ) ) ]
257
260
internal Dictionary < string , PartialFieldDescriptor < T > > _PartialFields { get ; set ; }
258
261
@@ -445,30 +448,30 @@ public SearchDescriptor<T> ScriptFields(
445
448
return this ;
446
449
}
447
450
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 > > ( ) ;
452
455
453
- var descriptors = new List < PartialFieldDescriptor < T > > ( ) ;
456
+ var descriptors = new List < PartialFieldDescriptor < T > > ( ) ;
454
457
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
+ }
461
464
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" ) ;
467
470
468
- this . _PartialFields . Add ( key , d ) ;
469
- }
470
- return this ;
471
- }
471
+ this . _PartialFields . Add ( key , d ) ;
472
+ }
473
+ return this ;
474
+ }
472
475
473
476
/// <summary>
474
477
/// <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
841
844
return this ;
842
845
}
843
846
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
+
844
873
/// <summary>
845
874
/// Describe the query to perform using a query descriptor lambda
846
875
/// </summary>
0 commit comments