elasticsearch 1.1.1 JDBC River 插件
Posted
技术标签:
【中文标题】elasticsearch 1.1.1 JDBC River 插件【英文标题】:elasticsearch 1.1.1 JDBC river plugin 【发布时间】:2014-05-06 00:50:53 【问题描述】:
"type" : "jdbc",
"jdbc" :
"strategy" : "oneshot",
"index" : "exec_jdbc_index",
"type" : "exec_jdbc_type",
"driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"url" : "jdbc:sqlserver://host:1433;databaseName=MyDB",
"user" : "user",
"password" : "password",
"sql": "Exec MyProcName",
"callable" : true,
"fetchsize" : 1000
我得到以下异常:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: A result set was generated for update.
请指教,如何从 JDBC River 插件调用存储过程。简单选择工作正常。
当然,这是跟踪:[错误][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] com.microsoft.sqlserver.jdbc.SQLServerException:生成了一个结果集进行更新。 java.io.IOException:com.microsoft.sqlserver.jdbc.SQLServerException:为更新生成了结果集。 在 org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:231) 在 org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.move(SimpleRiverFlow.java:129) 在 org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.run(SimpleRiverFlow.java:88) 在 java.lang.Thread.run(Thread.java:722) 原因:com.microsoft.sqlserver.jdbc.SQLServerException:为更新生成了结果集。 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:797) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:633) 在 org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.executeUpdate(SimpleRiverSource.java:522) 在 org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.execute(SimpleRiverSource.java:260) 在 org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:227) ... 3 更多
【问题讨论】:
【参考方案1】:您是否从存储的 proc 结果集中返回任何“_id”?我相信索引中需要 _id 以保持其唯一性。尝试将 _id 作为结果集的一部分返回。如果没有帮助,请您添加更多堆栈跟踪部分以了解实际根本原因。
【讨论】:
当然,这里是踪迹【参考方案2】:好的,终于找到问题所在了。可调用语句未被解析为可调用。
我修改了SimpleRiverSource
java 类,方法 fetch(),看起来连可调用语句都指向execute()
或executeWithParameter(command);
。我做了一个简单的改变来调用
executeCallable(command);
直接在那里,它开始工作。
【讨论】:
以上是关于elasticsearch 1.1.1 JDBC River 插件的主要内容,如果未能解决你的问题,请参考以下文章
如何实现elasticsearch与elasticsearch的数据同步
Elasticsearch:使用 JDBC client 连接到 Elasticsearch
elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解