如何使用 Elasticsearch NEST APIs UpdateAsync 方法将值更新为 null?
How to update value to null using Elasticsearch NEST APIs UpdateAsync method?
我正在使用 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,
"sku": "somesku",
"disposition": null
}
NEST API 调用示例:
var response = await Client.UpdateAsync<ProductSalesHistory>(id, u => u
.Index(IndexName)
.Doc(document)
.DocAsUpsert(true)
.Refresh(Refresh.False));
因此,Elasticsearch NEST 在将更新的文档发送到 API 之前序列化更新的文档,这样 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 并且还支持更新现有文档和创建新文档。由于我们进行了很多此类操作,因此我可以说此类更新的性能几乎相同。
我正在使用 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,
"sku": "somesku",
"disposition": null
}
NEST API 调用示例:
var response = await Client.UpdateAsync<ProductSalesHistory>(id, u => u
.Index(IndexName)
.Doc(document)
.DocAsUpsert(true)
.Refresh(Refresh.False));
因此,Elasticsearch NEST 在将更新的文档发送到 API 之前序列化更新的文档,这样 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 并且还支持更新现有文档和创建新文档。由于我们进行了很多此类操作,因此我可以说此类更新的性能几乎相同。