1

我從JDBC輸入有以下事件或行。如何使用Logstash過濾器將彈性搜索輸出轉換爲嵌套對象?

{"academic_session_id" : "as=1|dur=2015-16,as=2|dur=2016-17", 
      "branch_id" : 1} 

我想轉換或格式化成以下使用logstash過濾器...

{"branch_id": 1,"sessions":[{"as":"1","dur":"2015-16"},{"as":"2","dur":"2016-17"}]} 

如果你能提出任何替代logstash。我使用的是Elasticsearch 5.X版本

回答

5

由於這是一個非常自定義的數據操作,我會使用ruby過濾器,並使用code設置來編寫腳本來解析數據。像這樣的東西會工作:

filter { 
    ruby { 
    code => " 
     academic_session = event.get('academic_session_id').split(',').map{|data| data.split('|')} 
     sessions = academic_session.map do |arr| 
     temp_hash = {} 
     arr.each do |kv| 
      k,v = kv.split('=') 
      temp_hash[k] = v 
     end 
     temp_hash 
     end 
     event.set('sessions', sessions) 
    " 
    remove_field => ['academic_session_id'] 
    } 
} 
+0

我嘗試了上述過濾器的代碼,但我得到以下結果 { 「branch_id」:1, 「兩會」:[{ 「和」: 「1」},{ 「杜爾」 :「2015-16」},{「as」:「2」},{「dur」:「2016-17」}]} –

+0

我道歉,這是我的錯誤。它工作正常。我替換了'|'與','在我的輸入。 –

相關問題