日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(三)Solrj4到Solrj5的升级之路

發布時間:2024/4/17 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (三)Solrj4到Solrj5的升级之路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(三)Solrj4到Solrj5的升級之路

Solr5發布了,帶來了許多激動人心的新特性,但Solrj的許多接口也發生了變化,升級是痛苦的,但也是必須的,下面就趕緊來看看有哪些代碼需要升級吧。

變化1:SolrServer變成了SolrClient

應該說這個變化是合理的,畢竟Solrj就是一個客戶端,命名為Server本身就有問題。這樣一來,所有SolrServer系列的類都需要更改為SolrClient系列的類,好在方法基本繼承過來了,只需要修改一下類名就可以了。

SolrServer -> SolrClient HttpSolrServer -> HttpSolrClient CloudSolrServer -> CloudSolrClient

變化2:提交請求的方式變了

在Solrj4中,向服務器提交請求的方式比較簡單,首先擴展SolrRequest類,將需要組合的參數都以方法的形式暴露出來,并重寫process方法進行參數組合,如下所示。

class MySolrRequest extends SolrRequest {......@Overridepublic SolrResponse process(SolrServer server)throws SolrServerException, IOException {long startTime = System.currentTimeMillis();CoreAdminResponse res = new CoreAdminResponse();res.setResponse( server.request( this ) );res.setElapsedTime( System.currentTimeMillis()-startTime );return res;} }SolrRequest req = new MySolrRequest(); SolrResponse res = req.process(solrServer); if (res.getResponse().findRecursive("error", "failure") != null)return false; return true;

?

在Solrj5中,SolrRequest被極大地增強了,定義了許多新的子類出來,用戶基本上不需要自定義新的Request類了,但學習成本相應的也變高了,有得必有失啊!
以在Cloud中創建Collection為例,新的Request為CollectionAdminRequest.Create類,用戶只需要創建這個類的實例就可以設置所有的相關參數。提交仍然是process方法,只不過這個方法已經不需要我們重載了,直接調用就可以了,而且還擴展了返回的SolrResponse類,例如這里返回的就是CollectionAdminResponse類,代碼如下。

CollectionAdminRequest.Create req = new CollectionAdminRequest.Create(); try {req.setCollectionName(coreName);req.setConfigName(confName);req.setReplicationFactor(factor);req.setNumShards(shards);req.setMaxShardsPerNode(maxShardsPerNode);CollectionAdminResponse res = req.process(cloudSolrClient);if (res.getResponse().findRecursive("error", "failure") != null)return false;return true; } catch (SolrServerException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); }

?

新版的process方法比老版的多拋出一個IOException異常,需要增加對該異常的處理。

變化三:對Zookeeper的支持增強了

在Solrj4中,對Zookeeper的支持還比較簡單,主要就是通過org.apache.solr.cloud.ZkController類來完成對Zookeeper中內容的管理。
到了Solrj5,對ZkController類的方法進行了分隔,新增加了不少類,而且干脆就拋棄了對ZkController類的支持,因此給代碼升級帶來不少麻煩。
例如對于對在Zookeeper中配置文件的管理,老版代碼為

ZkController.uploadConfigDir(zkClient, new File(confDir), confName); ZkController.downloadConfigDir(zkClient, confName, new File(confDir));

新版增加了ZkConfigManager類進行專門管理,相應的方法也由靜態方法變成了動態方法,尤其是參數從File類型變成了JDK7中新引入的Path類型。

ZkConfigManager confManager = new ZkConfigManager(zkClient); confManager.uploadConfigDir(Paths.get(confDir), confName); confManager.downloadConfigDir(confName, Paths.get(confDir));

?

轉載于:https://www.cnblogs.com/gaogaoyanjiu/p/7813758.html

總結

以上是生活随笔為你收集整理的(三)Solrj4到Solrj5的升级之路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。