使用环境:oracle: 10g
solr:3.6.1
在从数据库导入solrindex 时报 org.apache.solr.common.SolrException: [doc=null] missing required field: id 错误
错误信息如下:
org.apache.solr.common.SolrException: [doc=null] missing required field: id
at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:355)
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:66)
at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:293)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:723)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:619)
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:327)
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:225)
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:375)
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:445)
at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:426)
报错配置的xml
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.0.4:1521:KKK"
user="user_name"
password="password"/>
<document>
<entity name="abc"
query="select systemid colum1,colunm2,... from table where rownum=1">
<field column="systemid" name="id"/>
<field column="colunm1" name="solr_colunm1"/>
<field column="colunm2" name="solr_colunm2"/>
<field .... />
</entity>
原因是 solr在执行 full-commit 找不到匹配的id,
解决办法 :修改配置,将你要作为solr id的字段取一个别名查询即可
<entity name="syrk"
query="select systemid as id, colum1,colunm2,... from table where rownum=1">
<field column="systemid" name="id"/>
<field column="colunm1" name="solr_colunm1"/>
<field column="colunm2" name="solr_colunm2"/>
<field .... />
</entity>