elasticsearch 1.1.1 JDBC河流插件

时间:2014-05-06 00:50:54

标签: stored-procedures elasticsearch-jdbc-river

{
  "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 Plugin调用存储过程。 Simple Select工作正常。

当然,这里是跟踪:[错误] [org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] com.microsoft.sqlserver.jdbc.SQLServerException:生成了一个结果集用于更新。 java.io.IOException:com.microsoft.sqlserver.jdbc.SQLServerException:为更新生成结果集。     at 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:生成了用于更新的结果集。     at 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)     at 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个

2 个答案:

答案 0 :(得分:0)

你是否正在返回任何" _id"来自存储过程结果集?我相信_id在索引中是必需的,以保持其唯一性。尝试返回_id作为结果集的一部分。如果它没有帮助,你能不能添加更多的堆栈跟踪部分来了解实际的根本原因。

答案 1 :(得分:0)

好的,终于找到了问题所在。可调用语句未被解析为可调用。

我修改了SimpleRiverSource java类,方法fetch(),看起来甚至可调用语句都转到execute()executeWithParameter(command);。我做了一个简单的改变来打电话 executeCallable(command); 在那里,它开始工作。