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 无法加载以下堆栈转储:

消息 {msg=SolrCore 'collection1' 由于初始化失败不可用:初始化 QueryElevationComponent 时出错。,trace=org.apache.solr.common.SolrException:由于初始化失败,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。调用(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.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java :859) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 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) at 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.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ... 1 更多原因:org.apache。 solr.common.SolrException:初始化 QueryElevationComponent 时出错。在组织。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 中的 .runTask(未知来源)。concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ... 1 更多原因:org.apache.solr.common.SolrException:初始化 QueryElevationComponent 时出错。在 org.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:240) 在 org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:601) 在 org.apache.solr.core.SolrCore .(SolrCore.java:830) ... 13 更多原因:java.lang.NumberFormatException:对于输入字符串:java.lang.NumberFormatException.forInputString(Unknown Source) 处 java.lang.Integer 处的“MA147LL/A”。 org.apache.solr.schema.TrieField.readableToIndexed(TrieField.java:387) 的 java.lang.Integer.parseInt(Unknown Source) 的 parseInt(Unknown Source) org.apache.solr.schema.TrieField.readableToIndexed(TrieField .java:378) 在 org.apache.solr.handler.component。

我究竟做错了什么?

4

2 回答 2

3

UniqueKey 需要是一个字符串。你试图把它变成一个整数。尝试将reference_id的类型更改为字符串并重新索引。

于 2013-08-02T00:36:51.197 回答
1

在进入 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 并搜索此关键字 字段 name="id" (如果存在)然后检查/添加属性 required="true"(这意味着您的强制 id 是必需的)并删除required=true其他字段。

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

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

在这里,您可以重新启动并运行

2)找到keyWord字段名称=“id”,如果存在,则删除该字段本身,同时删除id标签

在这里,您可以重新启动并运行

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

于 2013-08-03T10:56:59.800 回答