【solr】Spring data solr Document is missing mandatory uniqueKey field: id 注意這個坑
阿新 • • 發佈:2018-11-29
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; }