短语建议器的弹性嵌套 token_limit
Elastic nest token_limit for phrase suggester
最新的nest客户端好像不支持token_limit
phrase suggester的参数?如何扩展 NEST 以添加它而无需创建原始查询?
短语建议器缺少最新的 NEST 客户端 token_limit
;我会打开一个 PR 来添加它。
与此同时,您可以通过从 PhraseSuggesterDescriptor<T>
派生并在接口上实现令牌限制来支持它并仍然使用流畅的 lambda API
private static void Main()
{
var client = new ElasticClient();
var searchResponse = client.Search<Question>(s => s
.Size(0)
.Suggest(su => su
.Phrase("suggest_phrase", p => new MyPhraseSuggesterDescriptor<Question>()
.TokenLimit(5)
.Field(f => f.Title)
.Highlight(h => h
.PreTag("<em>")
.PostTag("</em>")
)
.Text("dotnot entrity framework")
)
)
);
}
public interface IMyPhraseSuggester : IPhraseSuggester
{
[PropertyName("token_limit")]
int? TokenLimit { get; set; }
}
public class MyPhraseSuggesterDescriptor<T> : PhraseSuggesterDescriptor<T>, IMyPhraseSuggester where T : class
{
int? IMyPhraseSuggester.TokenLimit { get; set; }
public MyPhraseSuggesterDescriptor<T> TokenLimit(int tokenLimit)
{
((IMyPhraseSuggester)this).TokenLimit = tokenLimit;
return this;
}
}
序列化为
{
"size": 0,
"suggest": {
"suggest_phrase": {
"text": "dotnot entrity framework",
"phrase": {
"field": "title",
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
},
"token_limit": 5
}
}
}
}
请注意,TokenLimit()
方法调用在任何其他调用之前进行,因为其他调用将 return PhraseSuggesterDescriptor<T>
而不是 MyPhraseSuggesterDescriptor<T>
。如果你愿意,你 可以 继续并在 MyPhraseSuggesterDescriptor<T>
上重新定义 IPhraseSuggester
的所有属性,以避免这个 API 怪癖,但这可能更比目前解决它所付出的努力更值得:)
最新的nest客户端好像不支持token_limit
phrase suggester的参数?如何扩展 NEST 以添加它而无需创建原始查询?
短语建议器缺少最新的 NEST 客户端 token_limit
;我会打开一个 PR 来添加它。
与此同时,您可以通过从 PhraseSuggesterDescriptor<T>
派生并在接口上实现令牌限制来支持它并仍然使用流畅的 lambda API
private static void Main()
{
var client = new ElasticClient();
var searchResponse = client.Search<Question>(s => s
.Size(0)
.Suggest(su => su
.Phrase("suggest_phrase", p => new MyPhraseSuggesterDescriptor<Question>()
.TokenLimit(5)
.Field(f => f.Title)
.Highlight(h => h
.PreTag("<em>")
.PostTag("</em>")
)
.Text("dotnot entrity framework")
)
)
);
}
public interface IMyPhraseSuggester : IPhraseSuggester
{
[PropertyName("token_limit")]
int? TokenLimit { get; set; }
}
public class MyPhraseSuggesterDescriptor<T> : PhraseSuggesterDescriptor<T>, IMyPhraseSuggester where T : class
{
int? IMyPhraseSuggester.TokenLimit { get; set; }
public MyPhraseSuggesterDescriptor<T> TokenLimit(int tokenLimit)
{
((IMyPhraseSuggester)this).TokenLimit = tokenLimit;
return this;
}
}
序列化为
{
"size": 0,
"suggest": {
"suggest_phrase": {
"text": "dotnot entrity framework",
"phrase": {
"field": "title",
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
},
"token_limit": 5
}
}
}
}
请注意,TokenLimit()
方法调用在任何其他调用之前进行,因为其他调用将 return PhraseSuggesterDescriptor<T>
而不是 MyPhraseSuggesterDescriptor<T>
。如果你愿意,你 可以 继续并在 MyPhraseSuggesterDescriptor<T>
上重新定义 IPhraseSuggester
的所有属性,以避免这个 API 怪癖,但这可能更比目前解决它所付出的努力更值得:)