[doc=null] missing required field: id

在使用Solr 3.6.1从Oracle 10g数据库导入索引时遇到缺失必要字段id的错误。该文章详细记录了错误发生的原因及解决方法,即通过在SQL查询中为id字段设置别名来确保Solr能正确识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

使用环境: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>

QByteArray jsonData; getPostBody(jsonData); QJsonParseError parseError; QJsonDocument requestDoc = QJsonDocument::fromJson(jsonData, &parseError); qDebug() <<"parseError.error = "<<parseError.error; // 验证JSON格式是否正确 if (parseError.error != QJsonParseError::NoError || !requestDoc.isObject()) { QJsonObject errorJson; errorJson["msg"] = "Invalid JSON format"; errorJson["status"] = "Error"; errorJson["timestamp"] = QDateTime::currentDateTime().toString(Qt::ISODate); QJsonDocument errorDoc(errorJson); sendResponse(400, "Bad Request", "application/json", errorDoc.toJson()); return; } QJsonObject requestJson = requestDoc.object(); // 验证必要字段是否存在 if (!requestJson.contains("appid") || !requestJson.contains("deviceId") || !requestJson.contains("CurrentStatus")) { QJsonObject errorJson; errorJson["msg"] = "Missing required fields"; errorJson["status"] = "Error"; errorJson["timestamp"] = QDateTime::currentDateTime().toString(Qt::ISODate); QJsonDocument errorDoc(errorJson); sendResponse(400, "Bad Request", "application/json", errorDoc.toJson()); return; } if (!requestJson["appid"].isString() || !requestJson["deviceId"].isString() || !requestJson["CurrentStatus"].isString()) { QJsonObject errorJson; errorJson["msg"] = "Invalid field type"; errorJson["status"] = "Error"; errorJson["timestamp"] = QDateTime::currentDateTime().toString(Qt::ISODate); QJsonDocument errorDoc(errorJson); sendResponse(400, "Bad Request", "application/json", errorDoc.toJson()); return; } QJsonObject json; json["msg"] = "success"; json["status"] = "Online"; //Online and offline json["personInfoChange"] = false; json["AttendanceInfoChange"] = false; json["timestamp"] = QDateTime::currentDateTime().toString(Qt::ISODate); QJsonDocument doc(json); sendResponse(200, "OK", "application/json", doc.toJson());根据这个给我写个http post请求
最新发布
07-08
// 解析头部信息 HeaderInfo parseHeaderInfo(const QDomElement& bodyElement) { HeaderInfo header; QDomNodeList preNodes = bodyElement.elementsByTagName("pre"); if (preNodes.isEmpty()) { qWarning() << "No <pre> tag found in document"; return header; } QString headerText = preNodes.at(0).toElement().text(); QStringList list = headerText.split("\n"); for each (QString str in list) { QString Company = "Company"; if (str.left(Company.length()) == Company) { header.company = str.split(":").last().trimmed(); } QString Operator = "Operator"; if (str.left(Operator.length()) == Operator) { header.operatorName = str.split(":").last().trimmed(); } QString Time = "Time/Date"; if (str.left(Time.length()) == Time) { header.dateTime = QDateTime::fromString(str.split(":").last().trimmed(), "hh:mm:ss MMMM d, yyyy"); } QString SampleID = "Sample ID"; if (str.left(SampleID.length()) == SampleID) { header.sampleId = str.split(":").last().trimmed(); } QString MeasureProgram = "Measure Program"; if (str.left(MeasureProgram.length()) == MeasureProgram) { header.measureProgram = str.split(":").last().trimmed(); } QString Temperature = "Temperature"; if (str.left(Temperature.length()) == Temperature) { header.temperature = str.split(":").last().trimmed(); } QString Measuredwith = "Measured with"; if (str.left(Measuredwith.length()) == Measuredwith) { header.instrument = str.split(":").last().trimmed(); } QString instrumentSN = "Instrument S/N"; if (str.left(instrumentSN.length()) == instrumentSN) { header.instrumentSN = str.split(":").last().trimmed(); } QString Comments = "Comments"; if (str.left(Comments.length()) == Comments) { header.comments = str.split(":").last().trimmed(); } } return header; }优化这个函数
06-28
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值