我正在使用NEST api而我无法使用client.Update<T, K>
方法将值更新为null
调用更新时是否有任何参数或设置允许通过nest api设置null
?
我知道我可以理智地做到这一点。
答案 0 :(得分:7)
而不是为整个请求更改应该如何为其序列化最安全且最隔离的方法是为更新引入单独的POCO,其中要清除的属性具有以下属性。
[JsonProperty(NullValueHandling = NullValueHandling.Include)]
示例POCO:
// <summary>
/// This POCO models an ElasticsearchProject that allows country to serialize to null explicitly
/// So that we can use it to clear contents in the Update API
/// </summary>
public class PartialElasticsearchProjectWithNull
{
[JsonProperty(NullValueHandling = NullValueHandling.Include)]
public string Country { get; set; }
}
使用该POCO更新示例:
var partialUpdate = new PartialElasticsearchProjectWithNull { Country = null };
this._client.Update<ElasticsearchProject, PartialElasticsearchProjectWithNull>(update => update
.Id(3)
.Doc(partialUpdate)
);
将生成以下JSON:
{
"doc": {
"country": null
}
}
答案 1 :(得分:1)
DateTime?
属性,我想将ElasticSearch date
属性更新为null或empty。Doc
method执行此操作。它不会将我的null赋值推送到elasticsearch(可能是因为elasticsearch date
类型不支持null)。所以这就是我所做的:
elasticsearch.yml
文件以包含this setting:script.groovy.sandbox.enabled: true
。我将C#代码修改为以下to remove the property from the document:
_elasticClient.Update<MyIndexType, object>(u => u
.Id(myDocumentId)
.Index(myIndexName)
.Type(myType)
.Script(string.Format("ctx._source.remove(\"{0}\")", myPropertyName))
.RetryOnConflict(3));