solrcloud ,solr在集群中建立索引

1 通过通过zookeeper通道建立索引

public static void main(String[] args) throws IOException, SolrServerException {
        //注意,zkHost在windows伪分布式与hadoop分布式设置不一样
        //windows伪分布式zkHost最后不需要加"/solr",linux的hadoop中需要添加"/solr"
		String zkHost = "node1:2181,node2:2181,node3:2181/solr";
		String defaultCollection = "collection1";
		CloudSolrServer server = new CloudSolrServer(zkHost);
		server.setDefaultCollection(defaultCollection); 		
		for (int i = 0; i < 1000; ++i) {
			SolrInputDocument doc = new SolrInputDocument();
			doc.addField("cat", "book");
			doc.addField("id", "book-" + i);
			doc.addField("name", "The Legend of Po part " + i);
			server.add(doc);
			if (i % 100 == 0)
				server.commit(); // periodically flush
		}
		server.commit();
	}

2  注意,CDH中,可以看zookeeper的设置,最大链接数为60,所以对于zookeeper一般用单例

public class myCloudSolrServer {

    // solrServer
    public static CloudSolrServer solrServer;

    
    //效率不高的方法
//    public static synchronized CloudSolrServer getSolrServer() {
//        if (solrServer == null) {
//            try {
//                solrServer = new CloudSolrServer(Const.ZK_HOST + "/solr");
//                final int zkClientTimeout = 20000; // 心跳20秒
//                final int zkConnectTimeout = 10000; // 设置链接主机超时(单位毫秒)
//
//                solrServer.setDefaultCollection(Const.defaultCollection);
//                solrServer.setZkClientTimeout(zkClientTimeout);
//                solrServer.setZkConnectTimeout(zkConnectTimeout);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//        return solrServer;
//    }

    //支持大并发方法
    public static CloudSolrServer getSolrServer() {
        if (solrServer == null) {
            synchronized (myCloudSolrServer.class) {
                if (solrServer == null) {
                    try {
                        solrServer = new CloudSolrServer(Const.ZK_HOST + "/solr");
                        final int zkClientTimeout = 20000; // 心跳20秒
                        final int zkConnectTimeout = 10000; // 设置链接主机超时(单位毫秒)
                        solrServer.setDefaultCollection(Const.defaultCollection);
                        solrServer.setZkClientTimeout(zkClientTimeout);
                        solrServer.setZkConnectTimeout(zkConnectTimeout);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return solrServer;
    }
}

 

 

3  急群中可以指定到某个分片

public static void main(String[] args) throws IOException, SolrServerException {
		String url= "node1:8983/solr/core_shard1_replica1";
		String defaultCollection = "collection1";
		HttpSolrServer server = new HttpSolrServer (url);	
		server.setDefaultCollection(defaultCollection); 	
		
		for (int i = 0; i < 1000; ++i) {
			SolrInputDocument doc = new SolrInputDocument();
			doc.addField("cat", "book");
			doc.addField("id", "book-" + i);
			doc.addField("name", "The Legend of Po part " + i);
			server.add(doc);
			if (i % 100 == 0)
				server.commit(); // periodically flush
		}
		server.commit();
	}

   注意,在建立索引的时候,不要每一个就去commit,为了提高效率,一般用

 Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
 for(){
 SolrInputDocument doc = new SolrInputDocument();  
 docs.add(doc);
 }
  server.add(docs);
  server.commit();

 其实 server.commit()效率也不高,一般用软提交

转载于:https://my.oschina.net/u/2293326/blog/516216

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值