@@ -8,72 +8,53 @@ namespace Nest
88 public partial interface ISuggestRequest
99 {
1010 string GlobalText { get ; set ; }
11- IDictionary < string , ISuggester > Suggest { get ; set ; }
11+ ISuggestContainer Suggest { get ; set ; }
1212 }
1313
1414 public partial class SuggestRequest
1515 {
1616 public string GlobalText { get ; set ; }
17- public IDictionary < string , ISuggester > Suggest { get ; set ; }
17+ public ISuggestContainer Suggest { get ; set ; }
1818 }
1919
2020 [ DescriptorFor ( "Suggest" ) ]
2121 public partial class SuggestDescriptor < T > where T : class
2222 {
2323 string ISuggestRequest . GlobalText { get ; set ; }
24- IDictionary < string , ISuggester > ISuggestRequest . Suggest { get ; set ; } = new Dictionary < string , ISuggester > ( ) ;
24+ ISuggestContainer ISuggestRequest . Suggest { get ; set ; } = new SuggestContainer ( ) ;
2525
2626 /// <summary>
2727 /// To avoid repetition of the suggest text, it is possible to define a global text.
2828 /// </summary>
29- public SuggestDescriptor < T > GlobalText ( string globalSuggestText )
30- {
31- Self . GlobalText = globalSuggestText ;
32- return this ;
33- }
29+ public SuggestDescriptor < T > GlobalText ( string globalText ) => Assign ( a => a . GlobalText = globalText ) ;
3430
3531 /// <summary>
3632 /// The term suggester suggests terms based on edit distance. The provided suggest text is analyzed before terms are suggested.
3733 /// The suggested terms are provided per analyzed suggest text token. The term suggester doesn’t take the query into account that is part of request.
3834 /// </summary>
39- public SuggestDescriptor < T > Term ( string name , Func < TermSuggesterDescriptor < T > , TermSuggesterDescriptor < T > > suggest )
40- {
41- name . ThrowIfNullOrEmpty ( nameof ( name ) ) ;
42- suggest . ThrowIfNull ( nameof ( suggest ) ) ;
43- var desc = new TermSuggesterDescriptor < T > ( ) ;
44- var item = suggest ( desc ) ;
45- Self . Suggest . Add ( name , item ) ;
46- return this ;
47- }
35+ public SuggestDescriptor < T > Term ( string name , Func < TermSuggesterDescriptor < T > , ITermSuggester > suggest ) =>
36+ AssignToBucket ( name , suggest ? . Invoke ( new TermSuggesterDescriptor < T > ( ) ) , ( b , s ) => b . Term = s ) ;
4837
4938 /// <summary>
5039 /// The phrase suggester adds additional logic on top of the term suggester to select entire corrected phrases
5140 /// instead of individual tokens weighted based on ngram-langugage models.
5241 /// </summary>
53- public SuggestDescriptor < T > Phrase ( string name , Func < PhraseSuggesterDescriptor < T > , PhraseSuggesterDescriptor < T > > suggest )
54- {
55- name . ThrowIfNullOrEmpty ( nameof ( name ) ) ;
56- suggest . ThrowIfNull ( nameof ( suggest ) ) ;
57-
58- var desc = new PhraseSuggesterDescriptor < T > ( ) ;
59- var item = suggest ( desc ) ;
60- Self . Suggest . Add ( name , item ) ;
61- return this ;
62- }
42+ public SuggestDescriptor < T > Phrase ( string name , Func < PhraseSuggesterDescriptor < T > , IPhraseSuggester > suggest ) =>
43+ AssignToBucket ( name , suggest ? . Invoke ( new PhraseSuggesterDescriptor < T > ( ) ) , ( b , s ) => b . Phrase = s ) ;
6344
6445 /// <summary>
6546 /// The completion suggester is a so-called prefix suggester.
6647 /// It does not do spell correction like the term or phrase suggesters but allows basic auto-complete functionality.
6748 /// </summary>
68- public SuggestDescriptor < T > Completion ( string name , Func < CompletionSuggesterDescriptor < T > , CompletionSuggesterDescriptor < T > > suggest )
69- {
70- name . ThrowIfNullOrEmpty ( nameof ( name ) ) ;
71- suggest . ThrowIfNull ( nameof ( suggest ) ) ;
49+ public SuggestDescriptor < T > Completion ( string name , Func < CompletionSuggesterDescriptor < T > , ICompletionSuggester > suggest ) =>
50+ AssignToBucket ( name , suggest ? . Invoke ( new CompletionSuggesterDescriptor < T > ( ) ) , ( b , s ) => b . Completion = s ) ;
7251
73- var desc = new CompletionSuggesterDescriptor < T > ( ) ;
74- var item = suggest ( desc ) ;
75- Self . Suggest . Add ( name , item ) ;
76- return this ;
52+ private SuggestDescriptor < T > AssignToBucket < TSuggester > ( string name , TSuggester suggester , Action < SuggestBucket , TSuggester > assign )
53+ where TSuggester : ISuggester
54+ {
55+ var bucket = new SuggestBucket { Text = suggester . Text } ;
56+ assign ( bucket , suggester ) ;
57+ return Assign ( a => a . Suggest . Add ( name , bucket ) ) ;
7758 }
7859 }
7960}
0 commit comments