Как обновить / заменить поле в документе ElasticSearch, используя PHP?

Я хочу обновить поле моего индексированного документа Elasticsearch. В моем случае это поле тегов.
Вот код, который у меня сейчас есть:

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

Таким образом, это обновит мой документ, добавив в него массив тегов, но не удалит старые теги.
Как я могу убедиться, что старые теги удаляются при добавлении новых тегов?

Я посмотрел в документации, но, как мы все знаем, документы Elasticsearch могут быть очень запутанными и повсеместными. Поэтому я спрашиваю здесь после нескольких дней поиска.

Любая помощь или совет будет принята с благодарностью.

4

Решение

Стандартное поведение обновления заключается в объединении полей массива / объекта, как описано в обновить документацию API.

…объекты объединяются, существующие скалярные поля перезаписываются
и новые поля добавляются.

Таким образом, вместо этого вы бы использовали скрипт для непосредственного изменения источника документа. Вы можете сделать его общим и, таким образом, кэшируемым, и передать params для лучшей производительности.

// 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]
]
]);
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector