solrcloud,solrはクラスタ内でインデックスを確立する

3558 ワード

1 zookeeperチャネルによるインデックスの作成
public static void main(String[] args) throws IOException, SolrServerException {
		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();

実はcommit()も効率的ではなく、一般的にソフトコミットで