2017-08-28 120 views
0

我有一个指数中的多个文档,每一个都具有以下字段:根据字段值合并文档?

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 

有没有办法呢?

回答

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尚不存在,与文档的“更新插入”附加价值,否则做脚本(追加serviceName和Type值添加到现有文档中)。

这将是非常简单的使用elasticsearch-py很少的代码做的,检查出scan helperbulk helper