首页 文章

SOLR mysql DataImport缺少必需的uniqueKey字段:id

提问于
浏览
0

我是SOLR的新手 . 使用DataImporter将MySQL记录带入索引 . 导入有效,但创建了0个文档 . 我看到以下错误:

org.apache.solr.common.SolrException:文档缺少必需的uniqueKey字段:id

我的data-config.xml如下所示:

<dataConfig>  
<dataSource type="JdbcDataSource" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/gartner" user="" password="" batchSize="-1" />  
<document name="inquiries">
    <entity name="inquiry_data" query="SELECT * FROM research_srv_req">
        <field column="reference_id" name="reference_id" />
        <field column="type" name="type" />
        <field column="sub_type" name="sub_type" />
        <field column="subject" name="inquiry_subject" />
        <field column="advice" name="advice" />
        <field column="client_question" name="client_question" />
        <field column="decision_stage_desc" name="decision_stage_desc" />
        <field column="acct_name" name="acct_name" />
        <field column="acct_sic_type" name="acct_sic_type" />
        <field column="acct_sic_sub_type" name="acct_sic_sub_type" />
        <field column="enterprise_sic_type" name="enterprise_sic_type" />
        <field column="enterprise_sic_sub_type" name="enterprise_sic_sub_type" />
        <field column="client_job_title" name="client_job_title" />
    </entity>  
</document>

我在schema.xml文件中添加了以下内容:

<field name="reference_id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="type" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="sub_type" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="inquiry_subject" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="advice" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="client_question" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="decision_stage" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="acct_name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="acct_sic_type" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="acct_sic_sub_type" type="string" indexed="true" stored="true" required="true" multiValued="false" />   
<field name="enterprise_sic_type" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
<field name="enterprise_sic_sub_type" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
<field name="client_job_title" type="string" indexed="true" stored="true" required="true" multiValued="false" />

原始的schema.xml也有以下行:

<uniqueKey>id</uniqueKey>

我尝试将id更改为reference_id,这是我数据库中的唯一列,但是SOLR无法使用以下堆栈转储加载:

message {msg =由于init失败,SolrCore'collection1'不可用:初始化QueryElevationComponent时出错 . ,trace = org.apache.solr.common.SolrException:由于init失败,SolrCore'collection1'不可用:初始化QueryElevationComponent时出错 . org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:860)位于org.apache.solr.servlet.SolrDispatchFilter.doFilter的org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:251) (solrDispatchFilter.java:158)org.apache中的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) . catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:298)org.apache.coyote.http11.Http11Processor.process(Http11Processor . java:859)org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java .lang.Thread.run(Unknown Source)由以下原因引起:org.apache.solr.common.SolrException:初始化QueryElevationComponent时出错 . org.apache.solr.core.SolrCore . (SolrCore.java:835)org.apache.solr.core.SolrCore . (SolrCore.java:629)org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer) .java:622)org.apache.solr.core.CoreContainer.create(CoreContainer.java:657)org.apache.solr.core.CoreContainer $ 1.call(CoreContainer.java:364)org.apache.solr .core.CoreContainer $ 1.call(CoreContainer.java:356)at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent .Executors $ RunnableAdapter.call(Unknown Source)at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor $ Worker java.util.concurrent.ThreadPoolExecutor中的.runTask(未知来源)$ Worker.run(未知来源)... 1更多引起:org.apache.solr.common.SolrException:初始化QueryElevationComponent时出错 . 位于org.apache.solrCore.SolrCore上org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:601)的org.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:240) . (SolrCore.java:830)... 13更多引起:java.lang.NumberFormatException:对于java.lang.Integer中的java.lang.NumberFormatException.forInputString(未知源)的输入字符串:“MA147LL / A” . 位于org.apache.solr.schema.TrieField.readableToIndexed(TrieField.java:387)的java.lang.Integer.parseInt(未知来源)的parseInt(未知来源)org.apache.solr.schema.TrieField.readableToIndexed(TrieField) .java:378)org.apache.solr.handler.component.QueryElevationComponent $ ElevationObj . (QueryElevationComponent.java:136)org.apache.solr.handler.component.QueryElevationComponent.loadElevationMap(QueryElevationComponent.java:309)at org .apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:223)... 15 more,code = 500} description服务器的鼓励nms内部错误({msg = SolrCore'collection1'由于init失败而不可用:初始化QueryElevationComponent时出错 . ,trace = org.apache.solr.common.SolrException:由于init失败,SolrCore'collection1'不可用:错误初始化QueryElevationComponent . 在org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:860)在org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:251)在org.apache.solr.servlet.SolrDispatchFilter.doFilter( SolrDispatchFilter.java:158)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)在org.apache.catalina .core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127 )在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)在org.apache.catalina.connector.CoyoteAdapter . 服务(CoyoteAdapter.java:298)在org.apache.coyote.http11.Http11Processor.process(Http11Processor.jav) a:859)org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java .lang.Thread.run(Unknown Source)由以下原因引起:org.apache.solr.common.SolrException:初始化QueryElevationComponent时出错 . org.apache.solr.core.SolrCore . (SolrCore.java:835)org.apache.solr.core.SolrCore . (SolrCore.java:629)org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer) .java:622)org.apache.solr.core.CoreContainer.create(CoreContainer.java:657)org.apache.solr.core.CoreContainer $ 1.call(CoreContainer.java:364)org.apache.solr .core.CoreContainer $ 1.call(CoreContainer.java:356)at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent .Executors $ RunnableAdapter.call(Unknown Source)at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor $ Worker java.util.concurrent.ThreadPoolExecutor中的.runTask(未知来源)$ Worker.run(未知来源)... 1更多引起:org.apache.solr.common.SolrException:初始化QueryElevationComponent时出错 . 位于org.apache.solrCore.SolrCore上org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:601)的org.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:240) . (SolrCore.java:830)... 13更多引起:java.lang.NumberFormatException:对于java.lang.Integer中的java.lang.NumberFormatException.forInputString(未知源)的输入字符串:“MA147LL / A” . parseInt函数(未知源)在java.lang.Integer.parseInt(未知来源)在org.apache.solr.schema.TrieField.readableToIndexed(TrieField.java:387)在org.apache.solr.schema.TrieField.readableToIndexed(TrieField的.java:378)在org.apache.solr.handler.component.QueryElevationComponent $ ElevationObj(QueryElevationComponent.java:136)在org.apache.solr.handler.component.QueryElevationComponent.loadElevationMap(QueryElevationComponent.java:309)在组织.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:223)... 15更多,代码= 500})阻止它实现抱怨这个要求 .

我究竟做错了什么?

2 回答

  • 1

    UniqueKey需要是一个字符串 . 你试图把它变成一个int . 尝试将 reference_id 的类型更改为string和reindex .

  • 3

    在进入schema.xml之前,请删除字段中的 required="true" 属性

    你有两个解决方案

    1)在您的data-config.xml中,将任何字段名称作为id,在表中为唯一 . 我想你的表中reference_id是唯一的

    <field column="reference_id" name="reference_id" />
    

    将该字段的名称属性更改为id,如下所示

    <field column="reference_id" name="id" />
    

    现在转到schema.xml并搜索此关键字 field name="id" 如果存在,则检查/添加属性required = "true"(这意味着您需要强制ID),并删除其他字段的 required=true .

    如果关键字 field name="id" 不存在,则创建一个新的,如下所示

    <field name="id" type="string" indexed="true" stored="true" required="true"></field>
    

    在这里,你重新开始并运行

    2)找到keyWord field name="id" ,如果它存在,则删除该字段本身,同时删除 id 标签

    在这里,你重新开始并运行

    希望任何一种方法都有帮助

相关问题