Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在elasticsearch中合并数据_Php_Arrays_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Merge_Array Merge - Fatal编程技术网 elasticsearch,merge,array-merge,Php,Arrays,elasticsearch,Merge,Array Merge" /> elasticsearch,merge,array-merge,Php,Arrays,elasticsearch,Merge,Array Merge" />

Php 如何在elasticsearch中合并数据

Php 如何在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

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

假设在创建i new时,它应该添加以前的数据,而不是替换以前的数据。因此,假设在名为“Christofer”的“update_字段”中存在一个用户,那么当我对$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);
为了更清楚,举个例子,让我们假设在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