更像这个查询没有被序列化 - NEST
More Like This Query Not Getting Serialized - NEST
我正在尝试使用 NEST 的对象初始化语法创建 Elasticsearch MLT 查询。但是,序列化后的最终查询仅缺少其中的 MLT 部分。不过,所有其他查询都存在。
检查查询对象时,存在 MLT。只是没有序列化。
我想知道我做错了什么。
我还注意到,当我添加字段时它起作用了。但我不认为字段是强制性的 属性,当它未设置时,MLT 查询将被忽略。
MLT 查询是这样初始化的;
new MoreLikeThisQuery
{
Like = new[]
{
new Like(new MLTDocProvider
{
Id = parameters.Id
}),
}
}
MLTDocProvider
实现了 ILikeDocument
接口。
我希望序列化查询包含 MLT 部分,但这是唯一缺少的部分。
这看起来像是 NEST 中 more like this 查询的 conditionless 行为中的错误;我 opened an issue to address。同时,您可以通过将 MoreLikeThisQuery
标记为 verbatim 来获得所需的行为,这将覆盖 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
}
]
}
}
}
我正在尝试使用 NEST 的对象初始化语法创建 Elasticsearch MLT 查询。但是,序列化后的最终查询仅缺少其中的 MLT 部分。不过,所有其他查询都存在。
检查查询对象时,存在 MLT。只是没有序列化。
我想知道我做错了什么。
我还注意到,当我添加字段时它起作用了。但我不认为字段是强制性的 属性,当它未设置时,MLT 查询将被忽略。
MLT 查询是这样初始化的;
new MoreLikeThisQuery
{
Like = new[]
{
new Like(new MLTDocProvider
{
Id = parameters.Id
}),
}
}
MLTDocProvider
实现了 ILikeDocument
接口。
我希望序列化查询包含 MLT 部分,但这是唯一缺少的部分。
这看起来像是 NEST 中 more like this 查询的 conditionless 行为中的错误;我 opened an issue to address。同时,您可以通过将 MoreLikeThisQuery
标记为 verbatim 来获得所需的行为,这将覆盖 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
}
]
}
}
}