问题描述
我正在使用 Elasticsearch nesT API
(7.8.1) 并且在使用 client.UpdateAsync<T>
方法将值更新为 null 时遇到问题。
有什么办法可以解决这个问题吗?
示例模型:
public class ProductSalesHistory
{
public Id { get; set; }
public Sku { get; set; }
public disposition { get; set; } //This should be null after update
}
原始文档示例:
{
"id": 1,"sku": "somesku","disposition": "C"
}
更新文档示例:
{
"id": 1,"disposition": null
}
var response = await Client.UpdateAsync<ProductSalesHistory>(id,u => u
.Index(IndexName)
.Doc(document)
.DocAsUpsert(true)
.Refresh(Refresh.False));
结果 Elasticsearch nesT 将文档序列化为这样的 JSON:
{
"id": 1,"sku": "somesku"
}
如您所见,没有向 Elasticsearch 提供“处置”值,因此文档中没有任何更改。
我尝试了什么:
- 我尝试将
[JsonProperty(NullValueHandling = NullValueHandling.Include)]
属性添加到ProductSalesHistory.disposition
属性,但没有成功。 - 将
() => new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include }
添加到ConnectionSettings
作为参数不是我的选择,因为我不想对其他查询产生副作用。
解决方法
由于缺乏其他想法,我是这样解决这个问题的:
var response = await Client.IndexAsync(document,i => i
.Index(IndexName);
IndexAsync 允许将值更新为 null,还支持更新现有文档和创建新文档。由于我们进行了很多此类操作,因此我可以说此类更新的性能几乎相同。