Я хочу обновить поле моего индексированного документа Elasticsearch. В моем случае это поле тегов.
Вот код, который у меня сейчас есть:
// Index tags in the page document
$es_client->update([
'index' => 'myappname',
'type' => 'page',
'id' => $page_id,
'body' => [
'doc' => [
'tags' => $tagsArray
]
]
]);
Таким образом, это обновит мой документ, добавив в него массив тегов, но не удалит старые теги.
Как я могу убедиться, что старые теги удаляются при добавлении новых тегов?
Я посмотрел в документации, но, как мы все знаем, документы Elasticsearch могут быть очень запутанными и повсеместными. Поэтому я спрашиваю здесь после нескольких дней поиска.
Любая помощь или совет будет принята с благодарностью.
Стандартное поведение обновления заключается в объединении полей массива / объекта, как описано в обновить документацию 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]
]
]);
Других решений пока нет …