代码之家  ›  专栏  ›  技术社区  ›  Dipesh

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

  •  2
  • Dipesh  · 技术社区  · 10 年前

    嘿,我正在尝试更新现有 document 属于 ElasticSearch ,我发现 cURL Elasticsearch网站的代码 注: 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());
    

    但它总是在我的 文件 而不是更新现有的。 请查看随附的屏幕截图和代码 enter image description here 请帮帮伙计们。

    2 回复  |  直到 10 年前
        1
  •  3
  •   Val    10 年前

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

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

    你可能已经在那里了,但只是面临着一个套管错配问题吗?从中查看 Nest reference :

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

    .查询(q=>q .术语(p=>p.Followers.First()。FirstName,“martijn”))默认情况下,NEST将camelCase属性。所以上面的FirstName属性 将翻译为“followers.firstName”。

    这可以通过设置

    设置。设置默认属性名称推断器(p=>p);这会离开的 属性名称未更改。

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

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