2016-01-19 89 views
1

我試圖導入與Postgres的嵌套對象的一些數據使用json_agg到elasticsearch,但ES不保存像嵌套對象的數據,但保存這樣JSON領域從Postgres的進口elasticsearch

"some_objects": {"type": "json", "value": "[{\"a\":\"1\"}]"} 

而不是:

"some_objects": [{"a":"1"}] 

它每次都發生,當我在查詢中使用json類型(我通過「logstash」導入數據)。 如果我需要導入連接的對象,我使用hstore,它的作品,但我不能使用hstore多個對象,並且不幸的是我不能數組而不是json。

我使用的是進口數據的SQL看起來像這樣

SELECT a.*, 
    (SELECT json_agg(hstore(so)) AS some_objects FROM 
     (SELECT * FROM c WHERE a.id=c.a_id) AS so), 
(SELECT hstore(ao) AS another_object FROM (SELECT b.*) AS ao), 
FROM a_table AS a 
LEFT OUTER JOIN b ON a.id=b.a_id 

在映射數據elasticsearch我設置:

... 
"some_objects": { 
    "type": "nested" 
}, 
"b": { 
    "type": "object" 
} 

併成功適用於「B」,並沒有按不爲「some_objects」工作。顯然它依賴於json在postgres中的類型。 任何想法如何我可以解決它?

非常感謝。

+0

它看起來像這樣http://stackoverflow.com/questions/21081196/jdbc-elasticsearch-and-postgresql-json-data-type-solved,但我不使用河水 – Alexey

回答

1

它被紅寶石過濾器解決。

filter { 
    ruby { 
     code => " 
      require 'json' 
      some_json_field_value = JSON.parse(event['some_json_field'].to_s) 
      event['some_json_field'] = some_json_field_value 
     " 
    } 
}