elasticsearch - 更像这个查询没有被序列化 - NEST

标签 elasticsearch nest

我正在尝试使用 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/

相关文章:

c# - 使用Mpdreamz/NEST遍历Elasticsearch查询结果

ElasticSearch .NET 子聚合

c# - 使用 NEST 和 ElasticSearch 的 DeleteByQuery

elasticsearch - 如何使用NEST构造记录的汇总(计数)?

json - 提高聚合跨多个 JSON 行的键值的性能

elasticsearch - 如何让 Elasticsearch 忽略 char_filter 清空的术语?

text - Elasticsearch和自由格式文本

elasticsearch - 在搜索唯一ID时,它会提供多个计数

elasticsearch multi-word keyword-tokenized 同义词分析

c# - Elasticsearch 嵌套中 2 个字段的条件排序