2017-08-28 69 views
0

我有一個指數中的多個文檔,每一個都具有以下字段:根據字段值合併文檔?

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 

有沒有辦法呢?

回答

1

你不能用Elasticsearch/Kibana做這個,你必須編寫一些代碼。您可以使用scroll api遍歷索引中的所有文檔,然後使用upsert query將它們索引到新索引中。我覺得你的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尚不存在,與文檔的「更新插入」附加價值,否則做腳本(追加serviceName和Type值添加到現有文檔中)。

這將是非常簡單的使用elasticsearch-py很少的代碼做的,檢查出scan helperbulk helper