elasticsearch - 根据字段值合并文档?

标签 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

有办法吗?

最佳答案

您不能仅使用Elasticsearch / Kibana来执行此操作,而必须编写一些代码。您可以使用scroll api遍历索引中的所有文档,然后使用upsert query将它们编入新索引。我认为您的更新请求将如下所示:

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值附加到现有文档中)。

使用elasticsearch-py只需很少的代码,这将非常简单,请检查scan helperbulk helper

关于elasticsearch - 根据字段值合并文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45922494/

相关文章:

elasticsearch - ELK堆栈和缩放

docker - 无法使用 elasticsearch 运行 kibana 和 logstash

json - Elastigo 和 Go,使用带有变量的原始 json 字符串进行搜索

elasticsearch - Elasticsearch 中结合范围和脚本过滤器

elasticsearch - Logstash 重复数据

elasticsearch - 如何计算Elasticsearch中父字段的总和?

elasticsearch - ElastAlert和Kibana 5.0

elasticsearch - 策展人未清除CloudWatch提供的过期索引

JSON 格式的 Elasticsearch cat 索引

elasticsearch - 添加where子句以聚合查询