Php 如何在elasticsearch中合并数据
我想在Elasticsearch中合并一些数据,但每次它都会替换我以前的数据,而不是合并它 假设在创建i new时,它应该添加以前的数据,而不是替换以前的数据。因此,假设在名为“Christofer”的“update_字段”中存在一个用户,那么当我对$usernames包含一个或两个用户名的数组进行合并($usernames)时,它总是替换以前的数据 我正在研究PHPPhp 如何在elasticsearch中合并数据,php,arrays,elasticsearch,merge,array-merge,Php,Arrays,elasticsearch,Merge,Array Merge,我想在Elasticsearch中合并一些数据,但每次它都会替换我以前的数据,而不是合并它 假设在创建i new时,它应该添加以前的数据,而不是替换以前的数据。因此,假设在名为“Christofer”的“update_字段”中存在一个用户,那么当我对$usernames包含一个或两个用户名的数组进行合并($usernames)时,它总是替换以前的数据 我正在研究PHP $usernames= array ("Johanna", "Maria"); $doc = a
$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);
为了更清楚,举个例子,让我们假设在usernames字段中存在两个用户名,比如“Christofer”、“Henrik”、“Eric”
所以现在我想添加更多的用户,比如“Johanna”、“Maria”
现在,每次我合并和更新文档时,它都会替换数据,例如(“Christofer”、“Henrik”、“Eric”)会被(“Johanna”、“Maria”)替换
我希望它们被添加而不是替换
是否有人知道如何合并新数据,或者只合并其他进程中的新数据。高级版谢谢。您需要使用。改为尝试此操作,即您需要在正文中向marge发送带有字段的doc
散列(即update\u fields
):
更新
没错,核心价值观和阵列正在被取代。
你可能想试试看
并确保在elasticsearch.yml
config文件中启用了脚本:
script.disable_dynamic: false
谢谢你的回答,但实际上我以前也尝试过,但对我来说不起作用,我已经更新了我的问题以更清楚,请你再看一遍:)非常感谢你的回答,尽管它返回了这个错误--{“错误”:“RemoteTransportException[[Fin][inet[/192.168.1.127:9300]][索引:数据/写入/更新]];嵌套:ElasticsearchIllegalArgumentException[未能执行脚本];嵌套:ScriptException[类型为[inline]、操作[update]和语言[groovy]的脚本被禁用];“,“状态”:400}好的,是的,需要启用脚本,我的错。顺便问一下,你使用的是什么ES版本?非常感谢你的回答:)让我们看看。
$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);
script.disable_dynamic: false