2016-01-19 50 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 
     " 
    } 
}