我在Elastic manual on nested objects中找不到如何使用Kibana Sense中的RESTful命令修改文档的字段和嵌套对象的示例。我在这里寻找与Solrs atomic updates类似的东西,它允许更新文档的特定字段。
Kibana Sense中的RESTful命令如何实现这一目标?我能找到的手册中唯一的相关信息是Partial Updates to Documents,但我不知道如何将这个用于此用例。
例如,直接来自Elastic docs:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"user": {
"type": "nested"
}
}
}
}
}
PUT my_index/my_type/1
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
如何删除嵌套对象中的条目,以便文档" 1"看起来像:
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
}
]
}
如何在嵌套对象中添加条目,以便文档" 1"看起来像:
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
},
{
"first" : "Peter",
"last" : "Parker"
}
]
}
答案 0 :(得分:2)
除非您要获取所有嵌套对象,然后添加/删除项目并为它们重新编制索引,否则必须使用脚本更新,这是先前提出的答案。但是,如果您有很多嵌套文档,则应该进行部分更新/添加和删除。从数据传输和索引的角度来看,它要快得多。
这是一篇很好的文章,介绍了如何进行脚本化更新:
https://iridakos.com/programming/2019/05/02/add-update-delete-elasticsearch-nested-objects
答案 1 :(得分:0)
除非我误解您的提问,否则您只需在每次需要时将更新的文档版本发布到相同的文档ID。
删除嵌套文档(或任何字段):
PUT my_index/my_type/1
{
"group" : "fans",
"user" : [
{
"first" : "Alice",
"last" : "White"
}
]
}
要添加用户,请将其添加到列表中:
PUT my_index/my_type/1
{
"group" : "fans",
"user" : [
{
"first" : "Alice",
"last" : "White"
},
{
"first" : "Peter",
"last" : "Parker"
}
]
}
注意:Documents in elasticsearch are immutable。对单个字段进行更改会导致整个文档重新编制索引。嵌套文档始终使用父文档重新编制索引,因此,如果更改父文档中的字段,则嵌套文档也将重新编制索引。如果嵌套文档很大且父级经常更改,则这可能是性能问题。