elasticsearch 是否基于字段值合并文档?,elasticsearch,kibana,kibana-5,elasticsearch,Kibana,Kibana 5" /> elasticsearch 是否基于字段值合并文档?,elasticsearch,kibana,kibana-5,elasticsearch,Kibana,Kibana 5" />

elasticsearch 是否基于字段值合并文档?

elasticsearch 是否基于字段值合并文档?,elasticsearch,kibana,kibana-5,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

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

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来实现这一点,你必须编写一些代码。您可以使用来迭代索引中的所有文档,然后使用将它们索引到新索引中。我认为您的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值附加到现有文档)

这将非常简单,只需使用很少的代码,请查看