Elasticsearch NEST c#客户端-按条件批量更新嵌套列表(时间序列数据)



我有一个索引结构,它有一些普通属性和嵌套列表属性。我需要更新(部分)批量/许多文档嵌套时间序列列表基于使用Elasticsearch .NET高级客户端NEST的条件.

示例数据

包含日期和值的历史记录列表是一个嵌套对象。我只需要更新与某些日期匹配的值。。我只想更新一些有历史日期的文档。例如,historydate 2020-02-01值不是history中的其他historydates值。我知道我们可以实现完整的批量文档索引和完整的嵌套列表替换,但我不知道部分嵌套列表。我在任何地方都找不到NEST文档。谁能帮帮我?
[
{
"id": 1,
"description": "market 1",
"salesprice": 10.9,
"cost": 7.95957,
"history": [
{
"historydate": "2020-01-01",
"quantity": 1
},
{
"historydate": "2020-02-01",
"quantity": 2
},
{
"historydate": "2020-04-01",
"quantity": 5
}
]
},
{
"id": 2,
"description": "market 2",
"salesprice": 12,
"cost": 12,
"history": [
{
"historydate": "2020-01-01",
"quantity": 1
},
{
"historydate": "2020-02-01",
"quantity": 2
},
{
"historydate": "2020-03-01",
"quantity": 6
},
]
},
{
"id": 3,
"description": "market3",
"salesprice": 15,
"cost": 15,
"history": [
{
"historydate": "2020-01-01",
"quantity": 10
},
{
"historydate": "2020-02-01",
"quantity": 20
},
{
"historydate": "2020-03-01",
"quantity": 30
}
]
}
]

我需要更新的数据是一些文档(我有来自不同来源的id数据)示例2具有2个日期和不同值的文档

示例第一个要更新的文档历史值

{
"historydate": "2020-02-01",
"quantity": 9
},
{
"historydate": "2020-03-01",
"quantity": 11
}

第二个要更新的文档历史值

{
"historydate": "2020-02-01",
"quantity": 20
},
{
"historydate": "2020-03-01",
"quantity": 15
}

非常感谢你的帮助。

谢谢你,克里希纳

使用脚本,它将不得不解析每个匹配的文档,但它将工作。注意:day在我这边是一个关键字,如果这是一个日期(可能会添加类+映射),你将不得不阅读一些无痛的文档。

var result = Client.UpdateByQuery<yourClass>(u => u
.Index(index)
.Query(r => r.Term(tt => //your query)
.Script(ss
=> ss.Source("for (item in ctx._source.history) {if (item.historyDate == params.day) { item.quantity = params.qty;} }")
.Params(new Dictionary<string, object>()
{
{"day", day},
{"qty", newQty }
}).Lang("painless"))
.Conflicts(Net.Conflicts.Proceed)
.Refresh(true) //optional
);

最新更新