使用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)
答案 0 :(得分:7)
在schema.xml
文件中,您提到了ID field = true
。
您尝试在SOLR中编制索引的文档也不包含此id字段,因此SOLR会抛出此错误。
OR
required = true
表单架构文件。请将您的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();