2016-04-26 59 views
0

我們正在嘗試實施一個二維solr雲集羣,其中第一個維度是一個集合,第二個維度是碎片。基於文檔屬性,收集應在運行時中確定。如何在Spring Data Solr 2.0.1中動態指定Solr Cloud集合?

我可以看到,這個功能是由solrj-CloudSolrClient支持接受集合名稱如add(String collection, SolrInputDocument doc)的適當方法,所以我註冊了@Bean CloudSolrClient("zookeeper.host")。但顯然這還不夠,因爲Spring Data Solr使用的SolrTemplate中的方法不接受集合名稱。

由於SolrTemplate使用SolrClient我試圖要解決延伸SolrTemplate和壓倒一切saveBeansaveBeans方法委託給CloudSolrClient#add(String collection, SolrInputDocument doc)CloudSolrClient#add(String collection, Collection<SolrInputDocument> docs)此問題引擎蓋下。它工作得很好,直到我需要爲查詢做同樣的事情。 SolrTemplate#executeSolrQuery是包私有和最終的,所以我不能覆蓋它。我在這裏卡住了!

總結我的問題:是否有一種方法可以在彈簧數據索引中指定集合名稱運行時

我將不勝感激任何幫助!

問候, Eugeny

回答

0

我的問題是有點不同,但我也有與集合名稱的問題在查詢和我的情況下加@SolrDocument(solrCoreName =「core_to_which_model_class_belong」)來模擬類的問題解決了。

+0

但不幸的是,它似乎並不動態。我需要能夠將文檔存儲在不同的集合中,而不是預定義的集合。 – Eugeny

+0

我正在調試solrj和spring-data-solr代碼,看起來不同的solr客戶端有不同的方法。看看這段代碼,例如: 'if(collection == null)' 'collection =(reqParams!= null)? reqParams.get(「collection」,getDefaultCollection()):getDefaultCollection();' 這是來自CloudSolrClient。似乎您需要提供請求參數來指示客戶端根據所選集合執行呼叫。但是我看不到spring-data-solr中的任何方法來傳遞請求。它創建在solrj –

+0

是的,謝謝!我也看過這個代碼。我結束了使用solrj實現查詢。 – Eugeny