-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathPhraseSuggestDescriptor.cs
139 lines (110 loc) · 3.56 KB
/
PhraseSuggestDescriptor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using Nest.Resolvers.Converters;
using Newtonsoft.Json;
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[JsonConverter(typeof(ReadAsTypeConverter<PhraseSuggester>))]
public interface IPhraseSuggester : ISuggester
{
[JsonProperty(PropertyName = "gram_size")]
int? GramSize { get; set; }
[JsonProperty(PropertyName = "real_word_error_likelihood")]
decimal? RealWordErrorLikelihood { get; set; }
[JsonProperty(PropertyName = "confidence")]
decimal? Confidence { get; set; }
[JsonProperty(PropertyName = "max_errors")]
decimal? MaxErrors { get; set; }
[JsonProperty(PropertyName = "separator")]
char? Separator { get; set; }
[JsonProperty(PropertyName = "direct_generator")]
IEnumerable<IDirectGenerator> DirectGenerator { get; set; }
[JsonProperty("collate")]
IPhraseSuggestCollate Collate { get; set; }
}
public class PhraseSuggester : Suggester, IPhraseSuggester
{
public int? GramSize { get; set; }
public decimal? RealWordErrorLikelihood { get; set; }
public decimal? Confidence { get; set; }
public decimal? MaxErrors { get; set; }
public char? Separator { get; set; }
public IEnumerable<IDirectGenerator> DirectGenerator { get; set; }
public IPhraseSuggestCollate Collate { get; set; }
}
public class PhraseSuggestDescriptor<T> : BaseSuggestDescriptor<T>, IPhraseSuggester where T : class
{
protected IPhraseSuggester Self { get { return this; } }
int? IPhraseSuggester.GramSize { get; set; }
decimal? IPhraseSuggester.RealWordErrorLikelihood { get; set; }
decimal? IPhraseSuggester.Confidence { get; set; }
decimal? IPhraseSuggester.MaxErrors { get; set; }
char? IPhraseSuggester.Separator { get; set; }
IEnumerable<IDirectGenerator> IPhraseSuggester.DirectGenerator { get; set; }
IPhraseSuggestCollate IPhraseSuggester.Collate { get; set; }
public PhraseSuggestDescriptor<T> Text(string text)
{
Self.Text = text;
return this;
}
public PhraseSuggestDescriptor<T> OnField(string field)
{
Self.Field = field;
return this;
}
public PhraseSuggestDescriptor<T> OnField(Expression<Func<T, object>> objectPath)
{
Self.Field = objectPath;
return this;
}
public PhraseSuggestDescriptor<T> Analyzer(string analyzer)
{
Self.Analyzer = analyzer;
return this;
}
public PhraseSuggestDescriptor<T> Size(int size)
{
Self.Size = size;
return this;
}
public PhraseSuggestDescriptor<T> ShardSize(int size)
{
Self.ShardSize = size;
return this;
}
public PhraseSuggestDescriptor<T> GramSize(int gramSize)
{
Self.GramSize = gramSize;
return this;
}
public PhraseSuggestDescriptor<T> Confidence(decimal confidence)
{
Self.Confidence = confidence;
return this;
}
public PhraseSuggestDescriptor<T> MaxErrors(decimal maxErrors)
{
Self.MaxErrors = maxErrors;
return this;
}
public PhraseSuggestDescriptor<T> Separator(char separator)
{
Self.Separator = separator;
return this;
}
public PhraseSuggestDescriptor<T> DirectGenerator(params Func<DirectGeneratorDescriptor<T>, DirectGeneratorDescriptor<T>>[] generators)
{
Self.DirectGenerator = generators.Select(g => g(new DirectGeneratorDescriptor<T>())).ToList();
return this;
}
public PhraseSuggestDescriptor<T> Collate(Func<PhraseSuggestCollateDescriptor<T>, PhraseSuggestCollateDescriptor<T>> collateDescriptor)
{
var selector = collateDescriptor(new PhraseSuggestCollateDescriptor<T>());
Self.Collate = selector.Collate;
return this;
}
}
}