如何在elasticsearch中合并数据
How to merge data in elasticsearch
我想在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
我想在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