我在一个索引中有多个文档,每个文档都有以下字段:
id serviceName Type
现在,愚蠢的是,
id
不是唯一的,我想更改它。我想使用Kibana / Elasticsearch来查询数据,以使id
唯一,并且我想要的行为是如果我具有以下文档:id serviceName Type
1 A T1
1 B T2
1 D T2
我使用查询,以便得到此结果
1 A,B,C T1,T2,T3
有办法吗?
最佳答案
您不能仅使用Elasticsearch / Kibana来执行此操作,而必须编写一些代码。您可以使用scroll api遍历索引中的所有文档,然后使用upsert query将它们编入新索引。我认为您的更新请求将如下所示:
POST test/type1/1/_update
{
"script" : {
"inline": "ctx._source.serviceName.add(params.serviceName); ctx._source.Type.add(params.Type)",
"lang": "painless",
"params" : {
"serviceName" : "A",
"Type": "T1"
}
},
"upsert" : {
"serviceName": ["A"],
"Type": ["T1"]
}
}
这意味着如果id 1还不存在,则为它添加文档的“upsert”值,否则执行脚本(将serviceName和Type值附加到现有文档中)。
使用elasticsearch-py只需很少的代码,这将非常简单,请检查scan helper和bulk helper
关于elasticsearch - 根据字段值合并文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45922494/