关于HttpSolrServer$RemoteSolrException: Document is missing mandatory uniqueKey field: id解决方案

Caused by: org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Document is missing mandatory uniqueKey field: id
	at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:552)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
	at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124)
	at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116)
	at org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:187)
	at org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:184)
	at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:141)
	... 4 more

 

做品优购项目遇到的深坑,根据异常的提示就到schema.xml文件里面进行查找是否没有定义field:id

id

经过查看存在id域,但仔细想了想一般都会默认有field:id存在,仔细检查代码发现了问题

public void importItemData(){
		TbItemExample example =new TbItemExample();
		Criteria createCriteria = example.createCriteria();
		createCriteria.andStatusEqualTo("1");//按条件查询已审核的商品
		
	List selectByExample = itemMapper.selectByExample(example);
	
	for (TbItem tbItem : selectByExample) {
		
		System.out.println(tbItem.getId()+" "+ tbItem.getTitle()+ " "+tbItem.getPrice());	
		Map parseObject = JSON.parseObject(tbItem.getSpec(),Map.class);
		tbItem.setSpecMap(parseObject);
	}
	solrTemplate.saveBean(selectByExample);
	solrTemplate.commit();
	System.err.println("1111");
	
	}

问题就出在solrTemplate.saveBean(selectByExample);这段代码上导致了Document is missing mandatory uniqueKey field: id这个错误信息,正确的是solrTemplate.saveBeans(selectByExample);这个错误很尴尬,由于两个方法很相似,调用的时候要看仔细了,不然会被错误信息带偏。

你可能感兴趣的:(关于HttpSolrServer$RemoteSolrException: Document is missing mandatory uniqueKey field: id解决方案)