solr学习2:solr集群模式下使用solrj

1.启动云模式的solr:

solr start -e cloud -z dmp01:2181,dmp02:2181,dmp03:2181,dmp04:2181,dmp05:2181

根据提示创建solr node。lz使用四台服务器创建solr集群,每台上起一个node,端口为8983。

2.创建collection(相当于单机版的core):

collection不能用web管理页面来创建,要使用web api来创建。根据solr wiki,在浏览器上写下url:

http://192.168.3.176:8983/solr/admin/collections?action=CREATE&name=testColl&collection.configName=testConf&numShards=2&replicationFactor=2

collection.configName:配置文件组名称。

配置文件组要自己手动上传到zk上,上传的脚本solr已经提供了,是~/solr-5.5.0/server/scripts/cloud-scripts/zkcli.sh。

./zkcli.sh -cmd upconfig -confdir /home/zhengyi/testConf -confname testConf -z dmp01:2181,dmp02:2181,dmp03:2181,dmp04:2181,dmp05:2181

lz创建testConf目录来放配置文件(该目录放哪无所谓),然后将~/solr-5.5.0/server/solr/configsets/basic_configs/conf下的配置文件copy到testConf目录下,还要将~/solr-5.5.0/example/example-DIH/solr/solr/conf下的3个html(貌似是管理页面上的html)文件拷贝到该目录下。给这组配置起个名字叫testConf,也就是collection.configName的值。

配置文件中solrconfig.xml是最基本的配置文件,上面的一些配置要进行修改,比如索引的存放目录:


<dataDir>/data/solr</dataDir>

numShards:一个索引要分解成几个碎片,存放在几台机器上。

replicationFactor:每个碎片的副本数量。

因为lz是4台主机,所以这样设置,让索引分解成2个碎片分别存在2台主机上,另外两台主机为这两个碎片做备份。

创建好之后,我们看下本地和zk上生成的文件:

本地:~/solr-5.5.0/example/cloud/下会有node1目录(如果一台机器上用不同的端口建两个节点,还会有node2,以此类推),数据目录/data/solr。

zk:/collections下是testColl节点,/configs下是上传的testConf配置文件,/live_nodes是启动的solr服务器节点。

3.添加field:

上一篇文章

4.solrj建立索引:

lz一直在找为HBase建立索引的方法,网上也有一些工具提供该功能,比如cloudera的Lily。但是可能是因为版本的原因,一直未实现。所以只能用最笨的办法solrj来做了:


public class Solrj {
	private static final String SOLR_URL = "http://192.168.3.176:8983/solr";
	
	public static void main(String[] args) throws SolrServerException, IOException {
		SolrClient client = new HttpSolrClient(SOLR_URL);
		// add
		System.out.println("====================solrj add begin");
		List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
		SolrInputDocument doc1 = new SolrInputDocument();
		doc1.addField("id", 181);
		doc1.addField("brandId", "1001");
		doc1.addField("brandName", "噼里啪啦1号");
		docs.add(doc1);
		SolrInputDocument doc2 = new SolrInputDocument();
		doc2.addField("id", 182);
		doc2.addField("brandId", "1002");
		doc2.addField("brandName", "噼里啪啦2号");
		docs.add(doc2);
		SolrInputDocument doc3 = new SolrInputDocument();
		doc3.addField("id", 183);
		doc3.addField("brandId", "1003");
		doc3.addField("brandName", "噼里啪啦3号");
		docs.add(doc3);
		client.add("testColl_shard1_replica1", docs);
		client.commit("testColl_shard1_replica1");
		System.out.println("====================solrj add end");
		
		// query
		System.out.println("====================solrj query begin");
		ModifiableSolrParams params = new ModifiableSolrParams();
		params.add("q", "*:*");
		params.add("rows", "100");
		QueryResponse resp = client.query("testColl_shard1_replica1", params);
		for (SolrDocument doc : resp.getResults()) {
			System.out.println(doc.getFieldValue("brandName"));
		}
		System.out.println("====================solrj query end");
		
		client.close();
	}
}

2 Replies to “solr学习2:solr集群模式下使用solrj”

发表评论