我正试图说服solr执行一个sqlite数据库的大容量导入。我遵从Solr-Wiki的所有指令。我将DataImportHandler配置为通过jdbc成功地打开数据库,并且我可以启动导入http://localhost:8080/solr/dataimport?command=full-import,但是无论我做什么,DIH都没有添加任何文档,即使它看起来是索引DB。
结果
<str name="command">full-import</str>
<str name="Total Requests made to DataSource">1</str>
<str name="Total Rows Fetched">**14**</str>
<str name="Total Documents Skipped">0</str>
<str name="Full Dump Started">2012-04-06 01:14:30</str>
<str name="">**Indexing completed**. **Added/Updated: 0 documents**. Deleted 0 documents.</str>
<str name="Committed">2012-04-06 01:14:32</str>
<str name="Optimized">2012-04-06 01:14:32</str>
<str name="Total Documents Processed">0</str>我在Oracle DB中使用emp表。
data-config.xml
<dataConfig>
<dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//localhost:1521/ORCL" user="scott" password="tiger"/>
<document>
<entity name="emp" query="select EMPNO, ENAME from EMP">
<field column="EMPNO" name="empno" />
<field column="ENAME" name="ename" />
</entity>
</document>
</dataConfig>schema.xml
<field name="empno" type="int" indexed="true" stored="true"/>
<field name="ename" type="string" indexed="true" stored="true"/>它似乎没有索引,但没有存储索引数据
知道为什么会发生这个问题吗?
编辑1日志显示警告消息,如..
WARNING: Error creating document : SolrInputDocument[{ename=ename(1.0)={SMITH}, empno=empno(1.0)={7369}}]
org.apache.solr.common.SolrException: [doc=null] missing required field: id
at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:346)
at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:60)
at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115)
at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:73)
at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:293)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:636)
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)那种原木跟在一起
此警告消息显示在日志的末尾。
2012. 4. 6 오후 12:12:25 org.apache.solr.update.processor.LogUpdateProcessor finish
INFO: {deleteByQuery=*:*,add=[(null), (null), (null), (null), (null), (null), (null), (null), ... (14 adds)],optimize=} 0 0我认为缺少必需字段: id与schema.xml中的配置有某种关系
<uniqueKey>id</uniqueKey> 但删除后,我收到了这条消息
HTTP状态500 - solr配置中的严重错误。查看您的日志文件,以获得更多关于可能出错的详细信息。如果希望solr在配置错误后继续运行,请在org.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:158) org.apache.solr.common.SolrException: QueryElevationComponent中更改: false :QueryElevationComponent要求模式使用org.apache.solr.core.SolrResourceLoader.inform at org.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:158)的StrField实现uniqueKeyField
有什么建议吗?
发布于 2012-04-06 07:06:27
尝试:
<entity name="emp" query="select EMPNO, ENAME from EMP">
<field column="EMPNO" name="id" />
<field column="ENAME" name="ename" /> 在data-config.xml中并返回:
<uniqueKey>id</uniqueKey> 在schema.xml中也让字段id。
或者你可以简单地替换:
<uniqueKey>id</uniqueKey> 通过以下方式:
<uniqueKey>epno</uniqueKey> 希望这会奏效。
发布于 2012-04-06 11:38:54
还可以将自动增量id添加到
<dataConfig>
<script><![CDATA[
id = 1;
function GenerateId(row) {
row.put('id', (id ++).toFixed());
return row;
}
]]></script>
<dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//localhost:1521/ORCL" user="scott" password="tiger"/>
<document>
<entity name="emp" query="select EMPNO, ENAME from EMP" transformer="script:GenerateId">
<field column="EMPNO" name="empno" />
<field column="ENAME" name="ename" />
</entity>
</document>
</dataConfig>https://stackoverflow.com/questions/10032532
复制相似问题