Solr错误文档缺少必需的uniqueKey字段ID

时间:2015-02-11 06:55:38

标签: solr

使用DataImportHandler将数据导入Solr时,我收到以下错误。请有人提出您的建议。

org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id
        at org.apache.solr.update.AddUpdateCommand.getIndexedId(AddUpdateCommand.java:92)
        at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:717)
        at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:557)
        at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:100)
        at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:70)
        at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:235)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:512)
        at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:416)
        at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:331)
        at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:239)
        at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:411)
        at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:483)
        at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:464)

5 个答案:

答案 0 :(得分:7)

schema.xml文件中,您提到了ID field = true

您尝试在SOLR中编制索引的文档也不包含此id字段,因此SOLR会抛出此错误。

解决方案

  1. 在您的所有文件中添加ID
  2. OR

    1. 删除id字段的required = true表单架构文件。
    2. 请将您的schema.xml文件和您要索引的文档分享到SOLR。

      另外请记住,如果您想快速回复,请尝试提供尽可能多的详细信息。

答案 1 :(得分:1)

这可能是solr

的错误报告应该改进的地方

对于我的情况,我已经定义了与string field无关的KEY,我正在尝试将null值添加到该字段。我应该指出该字段是nullable

答案 2 :(得分:1)

我也有这个问题,原因在于我的数据导入配置。如果使用hsqldb连接导入数据,请注意将数据库列映射到solr字段的方式。 Hsqldb区分大小写。因此,例如,以下内容产生错误。

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

虽然这很有效:

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

答案 3 :(得分:1)

我遇到了这个问题,我在id字段中有空值或重复。

检查您的ID字段中是否有重复项:

SELECT MAX(c) FROM (SELECT COUNT(x) as c, if FROM TABLE GROUP BY id)

并检查响应是否为1.如果没有,您可以找到以下字段:

SELECT COUNT(*) as c, id FROM <table> GROUP BY id HAVING c > 1

答案 4 :(得分:0)

我遇到了同样的问题,即使一切正常。 我在索引时在每个循环中创建了新的 SolrDocument。

HttpSolrServer server =
      new HttpSolrServer("http://localhost:8983/solr/shard1");
Collection<SolrInputDocument> docs = new ArrayList<>();

for (list<String> data: datas) {
  
    SolrInputDocument doc = new SolrInputDocument();
    String id = data("id");
    String fileName = data("fileName");
    String column2 = data("column2");
    String column3 = data("column3");

    i++;
    doc.addField("id", id);
    doc.addField("title", fileName);
    doc.addField("size", getFileSizeInMb(fileEntry.length()));
    doc.addField("column2", column2);
    doc.addField("column3", column3);

    System.out.println("doc: " + doc);
    docs.add(doc);
    
    if (i % 100 == 0) {
        System.out.println("Committed :" + i);
        server.add(docs);
        docs.clear();
    }  
}
server.commit();

在每个循环中初始化它使我的代码工作

SolrInputDocument doc = new SolrInputDocument();