我正在尝试使用elasticsearch river将一个postgresql Json数据类型列放入elasticsearch中。
这里是创造的河
curl -XPUT 'localhost:9200/_river/business_river/_meta' -d '{ "type" : "jdbc", "jdbc" : { "driver" : "org.postgresql.Driver", "url" : "jdbc:postgresql://localhost:5432/business", "user" : "postgres", "password" : "", "sql" : "select id, active, companies->'sic'->>'national_number' AS sic, companies->'names'->>'name' AS name, companies->'address'->>'country' AS country from businesses.business", "index" : "business", "type" : "jdbc" } }'
河边抱怨说“名称”列不存在!该查询在Postgresql中工作,这使我认为JDBC或river不支持Json数据类型。
这是完整的消息
[2014-01-13 07:47:27,919][INFO ][org.xbib.elasticsearch.river.jdbc.JDBCRiver] [Brigade] [jdbc][business_river] starting JDBC river: URL [jdbc:postgresql://localhost:5432/business], driver [org.postgresql.Driver], strategy [oneshot], index [jdbc]/[jdbc] [2014-01-13 07:47:33,281][ERROR][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] ERROR: column "names" does not exist Position: 31 org.postgresql.util.PSQLException: ERROR: column "names" does not exist Position: 31 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283) at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.executeQuery(SimpleRiverSource.java:417) at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:241) at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.move(SimpleRiverFlow.java:184) at org.xbib.elasticsearch.river.jdbc.strategy.oneshot.OneShotRiverFlow.run(OneShotRiverFlow.java:38) at java.lang.Thread.run(Thread.java:744)
感谢克雷格·林格(Craig Ringer)向我指出了真正的问题,我改写了我的河,用“ \ u0027”替换了PostgreSQL json查询中的简单引号,现在一切正常