使用 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.
...
请注意,您正在为更新创建一个动态对象,所以我相信如果您保持这种方式,属性可能不是解决方案
嘿,我试图更新 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.
... 请注意,您正在为更新创建一个动态对象,所以我相信如果您保持这种方式,属性可能不是解决方案