2015-11-26 39 views
0

我有一套標籤存儲在document.tagsdocument.fields.articleTags如何從Elasticsearch的2個集合中獲取所有唯一標籤?

這就是我如何從兩個名稱空間獲取所有標記,但是如何在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" 
      } 

回答

0

是的,你可以使用一個terms聚集了腳本,而不是將「加盟」兩種陣列(即加在一起),它是這樣的:

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

請注意,您需要確保enable dynamic scripting才能使此查詢生效。

+0

很酷,明天我會試試看。將盡快接受你的答案。 :-) – martins

相關問題