gpt4 book ai didi

php - 如何在Elasticsearch中合并数据

转载 作者:行者123 更新时间:2023-12-02 22:20:13 24 4
gpt4 key购买 nike

我想在Elasticsearch中合并一些数据,但是每次它替换我以前的数据而不是合并时。

假设当我新建时,它应该与先前的数据一起添加,而不是替换先前的数据。因此,假设在“update_field”中存在一个名为“Christofer”的用户,因此当我array_merge($ usernames)中$ usernames包含一个或几个用户名时,它总是替换先前的数据。

我正在使用PHP。

        $usernames= array ("Johanna", "Maria");
$doc = array();
$doc['update_field'] = array_merge($usernames);

$u_params = array();
$u_params['id'] = 'my_id';
$u_params['index'] = 'my_index';
$u_params['type'] = 'my_type';

$u_params['body'] = array('doc' => $doc);

$client->update($u_params);

为了更清晰,例如,在用户名字段中,存在几个用户名,例如-“Christofer”,“Henrik”,“Eric”。

所以现在我想添加更多用户,例如“Johanna”,“Maria”,...

现在,每次我合并和更新文档时,它都会替换数据,例如(“Christofer”,“Henrik”,“Eric”)被替换为(“Johanna”,“Maria”)。

我希望添加它们而不是替换它们。

有谁知道我如何合并新数据,或者仅合并其他过程中的新数据。先谢谢了。

最佳答案

您需要使用partial update。请改用此方法,即您需要在正文中发送doc哈希,其中包含要修饰的字段(即update_fields):

$params = [
'index' => 'my_index',
'type' => 'my_type',
'id' => 'my_id',
'body' => [
'doc' => [
'update_field' => array_merge($usernames)
]
]
];
$client->update($params);

更新

没错,核心值和数组已被替换。
您可能要尝试 scripted partial update
    $usernames= array ("Johanna", "Maria");
$script = array();
$script['script'] = 'ctx._source.update_field += new_value';
$script['params'] = array('new_value' => array_merge($usernames));

$u_params = array();
$u_params['id'] = 'my_id';
$u_params['index'] = 'my_index';
$u_params['type'] = 'my_type';

$u_params['body'] = $script;

$client->update($u_params);

并确保在 elasticsearch.yml配置文件中启用了脚本:
script.disable_dynamic: false

关于php - 如何在Elasticsearch中合并数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31716906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com