如何从 Elasticsearch 中的 2 个集合中获取所有唯一标签?

How to get all unique tags from 2 collections in Elasticsearch?

我有一组标签存储在 document.tagsdocument.fields.articleTags.

这就是我从两个命名空间中获取所有标签的方法,但是我如何才能将结果合并到一个数组中以响应来自 ES 的结果?

{
    "query" : {
        "match_all" : {  }
    },
    "size": 0, 
    "aggs" : {
      "tags" : {
        "terms" : { "field" : "tags" }
       },
      "articleTags" : {
        "terms" : { "field" : "articleTags" }
      }
    }
}

结果

我得到了 articleTags.buckets 和 tags.buckets 中列出的标签。是否可以一桶送达?

{
   "aggregations": {
      "articleTags": {
         "buckets": [
            {
               "key": "halloween"
            }
         ]
      },
      "tags": {
         "buckets": [
            {
               "key": "news"
            }

是的,您可以将单个 terms 聚合与脚本一起使用,而不是 "join" 两个数组(即将它们相加),它是这样的:

{
    "query" : {
        "match_all" : {  }
    },
    "size": 0, 
    "aggs" : {
      "all_tags" : {
        "terms" : { "script" : "doc.tags.values + doc.articleTags.values" }
       }
    }
}

请注意,您需要确保 enable dynamic scripting 才能使此查询正常工作。