根据字段值合并文档?

时间:2017-08-28 15:27:45

标签: elasticsearch kibana kibana-5

我在索引中有多个文档,每个文档都有以下字段:

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 个答案:

答案 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 helperbulk helper