使用 NEST 在 Elasticsearch 中简单地更新现有文档

Simple Existing Document Update in Elasticsearch using NEST

嘿,我试图更新 ElasticSearch 的现有 document,我从 Elasticsearch 站点找到了一个 cURL 代码 注意:Sam 类型 2 文档已经存在我只想更新现有字段

POST /EmployeeIndex/Sam/2/_update
{
   "doc" : {
      "Nested" : true,
      "views": 0
   }
}

它完全符合我的需要,但请帮助我将其转换为 NEST,因为我正在处理 .NET,我设法写了一个 code

 var responseUpdate = client.Update<clsEmployeeElasticSearch, object>(u => u
               .Index("EmployeeIndex")
                .Type("Sam")
                    .Id(2)
                    .Doc(new { Nested= true })
                    .RetryOnConflict(3)
                    .Refresh());

但它总是在我的 document 中创建一个新字段,而不是更新现有字段。 请查看随附的带有代码的屏幕截图 请大家帮忙。

您需要的是 PartialUpdate。应用于您的示例,以下代码应该可以满足您的期望。

    var responseUpdate = client.Update<clsEmployeeElasticSearch, object>(u => u
         .Index("EmployeeIndex")
         .Type("Sam")
         .Id(2)
         .Doc(new {IsActive ="true", Views="0"})
         .DocAsUpsert()
     );

是否有可能您已经在那里但只是面临大小写不匹配问题?见于 Nest reference:

Property Name Inference In many places NEST allows you to pass property names and JSON paths as C# expressions, i.e:

.Query(q=>q .Term(p=>p.Followers.First().FirstName, "martijn")) NEST by default will camelCase properties. So the FirstName property above will be translated to "followers.firstName".

This can be configured by setting

settings.SetDefaultPropertyNameInferrer(p=>p); This will leave property names untouched.

Properties marked with [ElasticAttibute(Name="")] or [JsonProperty(Name="")] will pass the configured name verbatim.

... 请注意,您正在为更新创建一个动态对象,所以我相信如果您保持这种方式,属性可能不是解决方案