更喜欢此查询未序列化-NEST

时间:2019-04-18 17:20:35

标签: elasticsearch nest

我正在尝试使用NEST的对象初始值设定项语法创建Elasticsearch MLT查询。但是,序列化后的最终查询仅缺少其中的MLT部分。但是,其他所有查询都存在。

检查查询对象时,存在MLT。只是没有序列化。

我想知道我可能做错了什么。

我还注意到,当我添加字段时,它可以工作。但是我不相信字段是这里的强制属性,如果未设置字段,则MLT查询将被忽略。

像这样初始化MLT查询;

new MoreLikeThisQuery
        {
            Like = new[]
            {
                new Like(new MLTDocProvider
                {
                    Id = parameters.Id
                }), 
            }
        }

MLTDocProvider实现了ILikeDocument接口。

我希望序列化查询包含MLT部分,但这是唯一缺少的部分。

1 个答案:

答案 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
        }
      ]
    }
  }
}