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)
... 32 more
出现这个报错,如果你从网上找到的解决方法还是无法解决这个问题的话, 那就注意一下下面这个地方:
TbItemExample example = new TbItemExample();
TbItemExample.Criteria criteria = example.createCriteria();
criteria.andStatusEqualTo("1");
List<TbItem> list = itemMapper.selectByExample(example);
//利用spring data solr将所有数据存入索引库
solrTemplate.saveBean(list); //这里存的是集合,应该使用: saveBeans()方法
//提交
solrTemplate.commit();
存储时,若存储的是单个的实体对象,则用saveBean()方法, 若存储的是集合则应该用saveBeans()方法, 犯这个问题的主要是对API不熟导致的! 特地记录下提醒自己
另外还需要注意的是: 若加字段注解的实体类有map集合类型的一定要 泛型, 不然就会报 空指针异常!!!
@Dynamic
@Field("item_spec_*")
private Map<String,String> specMap;//要加上泛型,不然会报空指针...
public Map<String, String> getSpecMap() {
return specMap;
}
public void setSpecMap(Map<String, String> specMap) {
this.specMap = specMap;
}