更像这个查询没有被序列化 - 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
        }
      ]
    }
  }
}