我正在尝试使用 NEST 的对象初始化器语法创建一个 Elasticsearch MLT 查询。但是,序列化时的最终查询仅缺少其中的 MLT 部分。但是,所有其他查询都存在。
检查查询对象时,存在 MLT。它只是没有被序列化。
我想知道我可能做错了什么。
我还注意到,当我添加字段时它可以工作。但我不认为 fields 是这里的强制属性,如果未设置,则忽略 MLT 查询。
MLT 查询是这样初始化的;
new MoreLikeThisQuery
{
Like = new[]
{
new Like(new MLTDocProvider
{
Id = parameters.Id
}),
}
}
MLTDocProvider
实现 ILikeDocument
界面。我希望序列化查询包含 MLT 部分,但它是唯一缺少的部分。
最佳答案
这看起来更像是 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
}
]
}
}
}
关于elasticsearch - 更像这个查询没有被序列化 - NEST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55750953/