我刚刚开始探索弹性搜索,并且在我的项目中坚持了一个要求。我尝试了很多事情,但没有任何对我有用。我已经在弹性搜索索引中保存了一个示例文档
"orderData": {
"lines": [
{
"lineNbr": 1,
"quantity": {
"amount": 1,
"uom": "EACH"
},
"weight": null,
"Qty": null
},
{
"lineNbr": 2,
"quantity": {
"amount": 1,
"uom": "EACH"
},
"weight": null,
"Qty": null
}
]
}
下次我只想更新第 1 行中的一些数据,但这里的问题是我不想进行字段明智的更新。我再次得到完整的 Line Nbr 1 json 类似
{
"lineNbr": 1,
"quantity": {
"amount": 10,
"uom": "EACH"
},
"weight": 5,
"Qty": 5
}
但是,如果我正在执行更新,第 nbr 2 行标记将被删除,只有第 nbr 1 行标记保留更新后的数据,但我从来不想触摸第 nbr 2 行 我怎样才能实现这个目标?任何帮助将不胜感激。预先感谢。
如何在Elasticsearch中部分更新文档而不影响其他字段,可以使用“更新”API
POST /your_index/_update/your_document_id
{
"script": {
"source": "ctx._source.orderData.lines.find(line -> line.lineNbr == params.lineNbr).putAll(params.updatedData)",
"lang": "painless",
"params": {
"lineNbr": 1,
"updated": {
"quantityFeild": {
"amountAny": 10,
"SKU": "EACH001"
}
}
}
}
}
ctx._source 指的是 --> 原始文档。 orderData.lines.find(line -> line.lineNbr == params.lineNbr) 根据 lineNbr 定位特定行。 putAll(params.updatedData) 更新updatedData中指定的字段,而不影响该行中的其他字段。
参考:https://hub.packtpub.com/crud-create-read-update-delete-operations-elasticsearch/