从NEST调度Update()到Elasticsearch.NET失败

时间:2017-12-07 13:20:08

标签: c# elasticsearch nest

我已升级到NEST 5.5.0:

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

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

遇到错误: {“从NEST调度更新()到Elasticsearch.NET失败\ r \ n \ n接收标记为POST的请求\ r \ n此端点接受POST \ r \ n请求可能没有提供足够的信息来生成任何这些端点:\ r \ n \ n - / {index = orders} / {type = order} / {id =} / _ update \ r \ n“}

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

2 个答案:

答案 0 :(得分:0)

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

尝试首先从索引中检索对象,如果您还没有,则从中获取弹性文档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));

OR

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

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

答案 1 :(得分:0)

实际上,对于Nest 6+,它是:

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