我正在尝试使用NEST的对象初始值设定项语法创建Elasticsearch MLT查询。但是,序列化后的最终查询仅缺少其中的MLT部分。但是,其他所有查询都存在。
检查查询对象时,存在MLT。只是没有序列化。
我想知道我可能做错了什么。
我还注意到,当我添加字段时,它可以工作。但是我不相信字段是这里的强制属性,如果未设置字段,则MLT查询将被忽略。
像这样初始化MLT查询;
new MoreLikeThisQuery
{
Like = new[]
{
new Like(new MLTDocProvider
{
Id = parameters.Id
}),
}
}
MLTDocProvider
实现了ILikeDocument
接口。
我希望序列化查询包含MLT部分,但这是唯一缺少的部分。
答案 0 :(得分:1)
这看起来像无条件行为中的错误,更像是NEST中的此查询;我有opened an issue to address。同时,您可以通过将MoreLikeThisQuery
标记为逐字记录来获得所需的行为,这将覆盖NEST的无条件行为
var client = new ElasticClient();
var parameters = new
{
Id = 1
};
var searchRequest = new SearchRequest<Document>
{
Query = new MoreLikeThisQuery
{
Like = new[]
{
new Like(new MLTDocProvider
{
Id = parameters.Id
}),
},
IsVerbatim = true
}
};
var searchResponse = client.Search<Document>(searchRequest);
序列化为
{
"query": {
"more_like_this": {
"like": [
{
"_id": 1
}
]
}
}
}