根据字段值合并文档?
问题描述:
我有一个指数中的多个文档,每一个都具有以下字段:根据字段值合并文档?
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将它们索引到新索引中。我觉得你的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尚不存在,与文档的“更新插入”附加价值,否则做脚本(追加serviceName和Type值添加到现有文档中)。
这将是非常简单的使用elasticsearch-py很少的代码做的,检查出scan helper和bulk helper