我在索引中有多个文档,每个文档都有以下字段:
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
有没有办法呢?
答案 0 :(得分:1)
你不能只使用Elasticsearch / Kibana,你必须编写一些代码。您可以使用scroll api遍历索引中的所有文档,然后使用upsert query将它们索引到新索引中。我认为你的upsert请求看起来像这样:
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值附加到现有doc)。
使用elasticsearch-py处理非常少的代码非常简单,请查看scan helper和bulk helper