1. 程式人生 > >【solr】Spring data solr Document is missing mandatory uniqueKey field: id 注意這個坑

【solr】Spring data solr 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)
	... 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;
    }