【问题标题】:Dispatching Update() from NEST into to Elasticsearch.NET failed将 Update() 从 NEST 分派到 Elasticsearch.NET 失败
【发布时间】:2018-10-07 06:37:50
【问题描述】:

我已经升级到 NEST 5.5.0:

我相信我缺少参数 ID,但我将如何在我的代码中编写它:

  var response = client.Update<myOrder>(order, x => x.Parent(order.Id));

遇到的错误: {"将 Update() 从 NEST 分派到 Elasticsearch.NET 失败\r\n收到标记为 POST 的请求\r\n此端点接受 POST\r\n请求可能没有提供足够的信息来创建这些端点中的任何一个:\r \n - /{index=orders}/{type=order}/{id=}/_update\r\n"}

还有其他方法可以编写此代码吗?

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    实际上对于 Nest 6+ 它是:

    var response = await client.UpdateAsync<myOrder, dynamic>(new DocumentPath<myOrder>(order.Id), 
        u => u.Index(indexName).Doc(order));
    

    【讨论】:

      【解决方案2】:

      是的,很可能您的对象中缺少 Elastic 文档 ID。

      尝试先从您的索引中检索该对象,并从中获取 Elastic Doc ID(如果您还没有)。

      var response = client.Search<myOrder>(p => p
                  .Size(1)
                  .Query(q => q
                      .Match(m => m
                          .Field(f => f.OrderID)
                          .Query("your order id")
                  )));
      
      var ElasticOrderID = response.Hits.FirstOrDefault()?.Id ?? string.Empty;
      

      然后用 ID 更新..

      var response = client.Update<myOrder>(ElasticOrderID , x => x.Parent(order.Id));
      

      您可以在您的对象中有一个 ElasticDocID 字段并使用该对象进行更新,因为它将在更新时使用该对象的 ID。

      var response = client.Update<myOrder>(myOrder, x => x.Parent(order.Id));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-11
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 2021-10-13
        • 1970-01-01
        相关资源
        最近更新 更多