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

Sai*_*ave 5 php elasticsearch

我想更新我的Elasticsearch索引文档的字段。就我而言,它是标签字段。这是我目前拥有的代码:

    // Index tags in the page document
    $es_client->update([
        'index'       => 'myappname',
        'type'        => 'page',
        'id'          => $page_id,
        'body'         => [
            'doc' => [
                'tags' => $tagsArray
            ]
        ]
    ]);
Run Code Online (Sandbox Code Playgroud)

因此,这将通过向其添加标签数组来更新我的文档,但不会删除旧标签。添加新标签时,如何确保删除旧标签?

我确实看过文档,但众所周知,Elasticsearch文档可能非常混乱且处处都是。因此,经过几天的搜索,我想在这里问。

任何帮助或建议,将不胜感激。

Mr *_*ash 5

标准更新行为是合并数组/对象字段,如更新 API 文档中所述。

...对象被合并在一起,现有的标量字段被覆盖并添加新字段。

因此,您可以使用脚本直接修改文档源。您可以使其通用,从而可缓存,并传入params以获得更好的性能。PHP 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]
   ]    
]);
Run Code Online (Sandbox Code Playgroud)