我想更新我的Elasticsearch索引文档的字段。在我的情况下,它是标签字段。这是我目前拥有的代码:
// Index tags in the page document
$es_client->update([
'index' => 'myappname',
'type' => 'page',
'id' => $page_id,
'body' => [
'doc' => [
'tags' => $tagsArray
]
]
]);
因此,这将通过向文档中添加标签数组来更新文档,但不会删除旧标签。添加新标签时,如何确保删除旧标签?
我确实看过文档,但众所周知,Elasticsearch文档可能非常混乱,而且到处都是。因此,经过几天的搜寻,我在这里发问。
如有任何帮助或建议,我们将不胜感激。
标准更新行为是按照更新API文档中的说明合并数组/对象字段。
对象合并在一起,覆盖现有标量字段并且添加了新的字段。
因此,您可以使用脚本直接修改文档源。您可以使其通用,从而可缓存,并传入params
以获得更好的性能。API博士文件
// Index tags in the page document
$es_client->update([
'index' => 'myappname',
'type' => 'page',
'id' => $page_id,
'body' => [
'script' => 'ctx._source.tags=tags',
'params' => ['tags' => $tagsArray]
]
]);