/** * Licensed to DigitalPebble Ltd under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * DigitalPebble licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.digitalpebble.stormcrawler.solr; import java.io.IOException; import java.util.Map; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.storm.shade.org.apache.commons.lang.StringUtils; import com.digitalpebble.stormcrawler.util.ConfUtils; @SuppressWarnings("serial") public class SolrConnection { private SolrClient client; private UpdateRequest request; private SolrConnection(SolrClient sc, UpdateRequest r) { client = sc; request = r; } public SolrClient getClient() { return client; } public UpdateRequest getRequest() { return request; } public static SolrClient getClient(Map stormConf, String boltType) { String zkHost = ConfUtils.getString(stormConf, "solr." + boltType + ".zkhost", null); String solrUrl = ConfUtils.getString(stormConf, "solr." + boltType + ".url", null); String collection = ConfUtils.getString(stormConf, "solr." + boltType + ".collection", null); int queueSize = ConfUtils.getInt(stormConf, "solr." + boltType + ".queueSize", -1); SolrClient client; if (StringUtils.isNotBlank(zkHost)) { client = new CloudSolrClient.Builder().withZkHost(zkHost).build(); if (StringUtils.isNotBlank(collection)) { ((CloudSolrClient) client).setDefaultCollection(collection); } } else if (StringUtils.isNotBlank(solrUrl)) { if (queueSize == -1) { client = new HttpSolrClient.Builder(solrUrl).build(); } else { client = new ConcurrentUpdateSolrClient.Builder(solrUrl) .withQueueSize(queueSize).build(); } } else { throw new RuntimeException( "SolrClient should have zk or solr URL set up"); } return client; } public static UpdateRequest getRequest(Map stormConf, String boltType) { int commitWithin = ConfUtils.getInt(stormConf, "solr." + boltType + ".commit.within", -1); UpdateRequest request = new UpdateRequest(); if (commitWithin != -1) { request.setCommitWithin(commitWithin); } return request; } public static SolrConnection getConnection(Map stormConf, String boltType) { SolrClient client = getClient(stormConf, boltType); UpdateRequest request = getRequest(stormConf, boltType); return new SolrConnection(client, request); } public void close() throws IOException, SolrServerException { if (client != null) { client.commit(); client.close(); } } }