似乎最新的nest客户端不支持短语建议者的token_limit
参数?如何在不必创建原始查询的情况下扩展NEST以添加它?
答案 0 :(得分:1)
最新的NEST客户端缺少token_limit
短语建议者;我会打开一个PR来添加它。
与此同时,您可以支持它并仍然使用流畅的lambda API,方法是从PhraseSuggesterDescriptor<T>
派生并在接口上实现令牌限制
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()
方法调用是在任何其他调用之前进行的,因为其他调用将返回PhraseSuggesterDescriptor<T>
而不是MyPhraseSuggesterDescriptor<T>
。如果您愿意,可以继续并重新定义IPhraseSuggester
上MyPhraseSuggesterDescriptor<T>
的所有属性,以避免这种API怪癖,但这可能比努力解决更多的努力它暂时:)