我正在使用 reindex API 将数据从旧格式转换为新格式,如下所示:
POST /_reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
},
"script": {
"source": """
ArrayList convertField(def str) {
// [complicated conversion]
return reformatted_data;
}
ctx._source.specific_field = convertField(ctx._source.specific_field);
"""
}
}
为了进行负载测试,我想将数据复制到新索引中(不需要完全相同,一些脚本化的更改就可以了)。
问题是,每次我运行重新索引时,目标索引中的所有数据都会被删除并替换为新批次。如何保留当前数据并添加到其中而不是替换?
答案 0 :(得分:1)
最简单的方法是使用脚本字段将重新索引文档的 _id
字段设置为 null
。这将为重新索引的文档生成一个新的 GUID。在你的情况下:
POST /_reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
},
"script": {
"source": """
ArrayList convertField(def str) {
// [complicated conversion]
return reformatted_data;
}
ctx._source.specific_field = convertField(ctx._source.specific_field);
ctx._id = null
"""
}
}
答案 1 :(得分:0)
原因是给定的 #include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> parent;
vector<int> values;
vector<int> r;
unordered_map<int, int> m;
int find(int s)
{
if (parent[s] == s)
{
return s;
}
return parent[s] = find(parent[s]);
}
void unite(int a, int b)
{
a = find(a);
b = find(b);
if (a != b)
{
if (r[a] < r[b])
{
parent[a] = b;
}
else if(r[a] > r[b])
{
parent[b] = a;
}
else
{
parent[b] = a;
r[a] += 1;
}
}
}
void solve()
{
int n;
cin >> n;
parent.resize(n);
values.resize(n);
r.resize(n);
int ans = 0;
for (int i = 0; i < n; i++)
{
cin >> values[i];
parent[i] = i;
r[i] = 1;
}
int p;
cin >> p;
while (p--)
{
int f, s;
cin >> f >> s;
f = f - 1;
s = s - 1;
int f1 = find(f);
int f2 = find(s);
if (f1 != f2)
{
unite(f1, f2);
}
}
// compression one more time to confirm the integrary of group number
for (int i = 0; i < n; i++) find(i);
for (int i = 0; i < n; i++)
{
if (m.find(parent[i]) != m.end())
{
m[parent[i]] = m[parent[i]] + values[i];
ans = max(ans, m[parent[i]]);
}
else
{
m[parent[i]] = values[i];
ans = max(ans, m[parent[i]]);
}
}
cout << ans << endl;
m.clear();
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// #endif // ONLINE_JUDGE
solve();
}
只能是一个文档。
对于我的测试,我所做的只是编辑每个 _id
。
_id