JSON 字段从 postgres 导入到 elasticsearch
JSON fields imports from postgres to elasticsearch
我正在尝试使用 json_agg 将一些带有嵌套对象的数据从 postgres 导入到 elasticsearch,但 ES 不会像嵌套对象那样保存数据,而是像这样保存
"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。
我有什么解决办法吗?
非常感谢。
已通过 ruby 过滤器解决。
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
"
}
}
我正在尝试使用 json_agg 将一些带有嵌套对象的数据从 postgres 导入到 elasticsearch,但 ES 不会像嵌套对象那样保存数据,而是像这样保存
"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。 我有什么解决办法吗?
非常感谢。
已通过 ruby 过滤器解决。
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
"
}
}