如何使用PHP更新/替换ElasticSearch文档中的字段


How to update/replace a field in an ElasticSearch document using PHP?

我想更新我的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]
   ]    
]);