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

时间:2015-11-26 09:41:19

标签: elasticsearch aggregation

我有一组存储在 document.tags document.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"
            }

1 个答案:

答案 0 :(得分:0)

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

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

请注意,您需要确保enable dynamic scripting才能使此查询生效。