SolrCloud攻略

近期一直在使用SolrCloud,乘着酒醉大概總結一下。java

1.安裝web

原來一直有個誤區,認爲SolrCloud啓動時,必須至少有個core才能夠,其實否則。apache

首先按照Solr官方wiki上正常部署Solr,而後在Tomcat的啓動參數中加入如下參數:app

若是使用內置的zookeeper:-DzkRun -DzkHost=localhost:9080。對於DzHost,能夠是多個地址,用逗號分割,端口是Tomcat的端口+1000。通常Tomcat的端口是8080,因此這裏是9080。webapp

若是使用外部的zookeeper:-DzkHost={ip:port}測試

對於這兩種狀況,使用多個zookeeper時,多須要修改zoo.cfg文件,好比我有三個zookeeper,zoo.cfg內容以下:spa

server.1={ip:2888:3888}
server.2={ip:2888:3888}
server.3={ip:2888:3888}scala

Solr正常啓動後,對於solr 4.5之前的版本,打開Solr Admin管理界面是有錯誤提示的,能夠忽略,對於最新發布的Solr 4.5是沒有錯誤提示的。server

2.上傳SolrCloud Collection文件blog

java -cp "C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\solr.patent.com\solr\WEB-INF\lib\*" org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:9080 -confdir {Solr Collection配置文件地址} -confname {自定義的Solr Collection 配置名稱}

能夠上傳多個配置。

3.建立Collection

http://localhost:8080/solr/admin/collections?action=CREATE&name={Collection名稱}&numShards={分片數量}&collection.configName={指定的Collection配置文件名稱}

建立完Collection後,對於Solr 4.5之前版原本說,就能夠正常打開Solr Admin管理界面來講。對於最新發布的Solr 4.5,經過測試,是有Bug的(我已經提交給Apache Solr),修改CoreAdminHandler,在第453行下加入如下代碼:

String opts = params.get(CoreAdminParams.CONFIG);
		CloudDescriptor cd = dcore.getCloudDescriptor();

		if (cd != null) {
			cd.setParams(req.getParams());

			opts = params.get(CoreAdminParams.COLLECTION);
			if (opts != null)
				cd.setCollectionName(opts);

			opts = params.get(CoreAdminParams.SHARD);
			if (opts != null)
				cd.setShardId(opts);

			opts = params.get(CoreAdminParams.SHARD_RANGE);
			if (opts != null)
				cd.setShardRange(opts);

			opts = params.get(CoreAdminParams.SHARD_STATE);
			if (opts != null)
				cd.setShardState(opts);

			opts = params.get(CoreAdminParams.ROLES);
			if (opts != null)
				cd.setRoles(opts);

			opts = params.get(CoreAdminParams.CORE_NODE_NAME);
			if (opts != null)
				cd.setCoreNodeName(opts);

			Integer numShards = params.getInt(ZkStateReader.NUM_SHARDS_PROP);
			if (numShards != null)
				cd.setNumShards(numShards);
		}

  

4.建立索引

示例代碼以下(scala編寫):

val cloudServer = new CloudSolrServer({zookeeper地址})
cloudServer.setDefaultCollection("{默認Collection名稱}")
cloudServer.setParser(new BinaryResponseParser())
val updateRequest = new UpdateRequest()
updateRequest.setParam("collection", "{要更新的Collection名稱}")
updateRequest.add({更新的文檔})
updateRequest.process(cloudServer)

5.查詢

示例代碼以下(scala編寫):

val cloudServer = new CloudSolrServer({zookeeper地址})
cloudServer.setDefaultCollection("{默認Collection名稱}")
cloudServer.setParser(new BinaryResponseParser()	  
val response = new QueryRequest(solrQuery, METHOD.POST).process(cloudServer)
val result = response.getResults()

整體來講SolrCloud使用起來各方面仍是不錯的,期待5.0的發佈!

相關文章
相關標籤/搜索