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

时间:2016-02-26 13:46:19

标签: c# elasticsearch nest

嘿我尝试更新document的现有ElasticSearch,我在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中创建一个新字段,而不是更新现有字段。 请参阅随附的屏幕截图,其中包含代码enter image description here 请帮帮我们。

2 个答案:

答案 0 :(得分:3)

您需要的是PartialUpdate。应用于您的示例,以下代码应该按预期执行。

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

答案 1 :(得分:3)

您是否可能已经在那里,但只是面临套管失配问题?从Nest reference看:

  

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

     

.Query(Q =&GT; Q       .Term(p =&gt; p.Followers.First()。FirstName,&#34; martijn&#34;))NEST默认为camelCase属性。所以上面的FirstName属性   将被翻译为&#34; followers.firstName&#34;。

     

可以通过设置

进行配置      

settings.SetDefaultPropertyNameInferrer(p值=指p);这将离开   财产名称未触及。

     

标有[ElasticAttibute(Name =&#34;&#34;)]或的标签   [JsonProperty(Name =&#34;&#34;)]将逐字传递配置的名称。

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