繁体   English   中英

使用NEST在Elasticsearch中进行简单的现有文档更新

[英]Simple Existing Document Update in Elasticsearch using NEST

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

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

它完美地满足了我的需要,但是当我在.NET工作时,请帮助我将其转换为NEST ,我设法编写了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参考

属性名称推断在许多地方,NEST允许您将属性名称和JSON路径作为C#表达式传递,即:

.Query(q => q .Term(p => p.Followers.First()。FirstName,“ martijn”))默认情况下,NEST将使用camelCase属性。 因此,上面的FirstName属性将转换为“ followers.firstName”。

可以通过设置来配置

settings.SetDefaultPropertyNameInferrer(p值=> P); 这将使属性名称保持不变。

标有[ElasticAttibute(Name =“”)]或[JsonProperty(Name =“”))]的属性将逐字传递配置的名称。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM