2017-02-09 99 views
0
發送不同的JSON的領域不同類型的

我已經JSON數據的格式如下,我發送到logstash實例 監聽一個HTTP端點Logstash:在Elasticsearch

{ 
    client: "c", 
    pageInfo: ["a","b","c"], 
    restInfo: ["r","s","t"] 
} 

我的目標是這個輸入發送到彈性搜索終點是同一指數中的兩種不同類型;例如

PUT elasticsearchhost:port/myindex/pageInfo 
     { client: "c", pageInfo: ["a","b","c"] } 

PUT elasticsearchhost:port/myindex/restInfo 
     { client: "c", restInfo: ["r","s","t"] } 

我曾試圖與一些過濾器在logstash(分裂,變異,神交),但我不明白如何執行這個非常具體的分裂,或者如果我也必須修改輸出部分我的配置

回答

1

您將需要使用clone克隆事件,然後修改克隆。

例如:

filter { 
    clone { clones => ["pageInfo", "restInfo" ] } 
    if [type]=="pageInfo" { 
    mutate { 
     remove_field => "restInfo" 
    } 
    } 
    if [type] == "restInfo" { 
    mutate { 
     remove_field => "pageInfo" 
    } 
    } 
} 

,然後在你的elasticsearch輸出,一定要包括document_type => "%{type}"

+0

謝謝你,它的工作原理!通過這種方式,它創建了三個與同一事件相關的實體;有沒有辦法只有一個克隆,並參考'if'語句中的原始消息?原始消息的原始類型值是什麼? – alexlipa

+0

原始事件的類型是您在輸入時設置的任何類型。 – Alcanzar

+0

你也可以做別的,如果然後一個最終的其他{drop {}} – Alcanzar