首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从solr调用存储过程

问从solr调用存储过程
EN

Stack Overflow用户
提问于 2012-01-12 01:46:50
回答 2查看 4.4K关注 0票数 10

我正在编写一个使用solr 3.4进行搜索的应用程序。为了填充solr的索引,我使用dataimporthandler和com.microsoft.sqlserver.jdbc.SQLServerDriver类从MS数据库中获取数据。

现在我正在尝试调用数据库上的存储过程,但solr日志总是返回错误:

代码语言:javascript
复制
Full Import failed:org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: exec dbo.h_getThumbnails @h = '52'        Processing Document # 48
    at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:72)
    at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:253)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:210)
    at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:39)
    at org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:59)
    at org.apache.solr.handler.dataimport.CachedSqlEntityProcessor.getAllNonCachedRows(CachedSqlEntityProcessor.java:69)
    at org.apache.solr.handler.dataimport.EntityProcessorBase.getSimpleCacheData(EntityProcessorBase.java:259)
    at org.apache.solr.handler.dataimport.CachedSqlEntityProcessor.nextRow(CachedSqlEntityProcessor.java:58)
    at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:238)
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:596)
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:622)
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:268)
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:187)
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:359)
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:427)
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:408)
Caused by: java.lang.NullPointerException
    at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:251)
    ... 14 more

我已经尝试了不同的版本来调用存储过程。下面是查询:

代码语言:javascript
复制
<entity  name="PicturePath" processor="CachedSqlEntityProcessor" query="exec dbo.h_getThumbnails @h = 4
">      </entity>

<entity  name="PicturePath" processor="CachedSqlEntityProcessor" query="call dbo.h_getThumbnails @h = 4
">      </entity>
<entity  name="PicturePath" processor="CachedSqlEntityProcessor" query=" dbo.h_getThumbnails @h = 4
">      </entity>

有人知道如何从solr调用存储过程吗?或者有人知道我应该在哪里搜索原因?

非常感谢你的回答!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 21:58:32

对我来说,它是这样工作的:

代码语言:javascript
复制
<dataSource name="ds-1" type="JdbcDataSource" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://10.0.2.47;databaseName=dbname" user="username" password="password" 
    responseBuffering="adaptive" batchSize="0" autoCommit="false"   /> 
<entity name="item" dataSource="ds-1" query="[sp_StuffDataImportHandler]"></entity>

但是,只有当存储过程包含简单的SELECT查询时,这才有效。

如果我在返回结果的查询之前声明了一些变量或临时表,那么导入将失败,给我的异常与您得到的异常相同。

稍后编辑

我设法让它在存储过程中处理更复杂的查询。在存储过程的开头添加SET NOCOUNT ON;。

票数 15
EN

Stack Overflow用户

发布于 2013-09-06 12:37:38

您需要使用以下语法调用存储过程

代码语言:javascript
复制
<entity  name="PicturePath" processor="CachedSqlEntityProcessor" query="[h_getThumbnails] '4'"
">      </entity>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8824072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档