Package org.OpenGeoPortal.Solr

Source Code of org.OpenGeoPortal.Solr.SolrJClient

package org.OpenGeoPortal.Solr;

import java.io.IOException;
import java.net.MalformedURLException;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SolrJClient implements SolrClient{
  private SearchConfigRetriever searchConfigRetriever;
  private SolrServer solrServer;
  protected final Logger logger = LoggerFactory.getLogger(this.getClass());
  //String solrUrl;
 
 
  public SolrJClient(SearchConfigRetriever searchConfigRetriever) {
    this.searchConfigRetriever = searchConfigRetriever;
    init();
  }
 
  public void init() {
    try {
      String url = searchConfigRetriever.getSearchUrl();
      url = url.substring(0, url.indexOf("/select"));
      //logger.info(url);
      HttpSolrServer httpServer = new HttpSolrServer(url);
        // Note that the following property could be set through JVM level arguments too
        /*System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr");
        CoreContainer.Initializer initializer = new CoreContainer.Initializer();
        CoreContainer coreContainer = initializer.initialize();
        EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");*/
     
      httpServer.setParser(new XMLResponseParser());
      this.solrServer = (SolrServer) httpServer;
     
    } catch (MalformedURLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      logger.error("problem creating solr server");
     
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      logger.error("problem creating solr server");
    }
  }
 
  public SolrServer getSolrServer(){
    return solrServer;
  }
 
  public Boolean commit() {
    try {
      UpdateResponse updateResponse = solrServer.commit();
      return successResponse(updateResponse);
    } catch (SolrServerException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return false;

    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return false;

    }

  }

  private Boolean successResponse(UpdateResponse updateResponse){
    if (updateResponse.getStatus() == 200){
      return true;
    } else {
      return false;
    }
  }
 
  public String delete(String[] layerIds) throws Exception {
    //List<String> ids = Arrays.asList(layerIds);
    String query = "";
    for (String layerId : layerIds){
      query += "LayerId:" + layerId.trim();
      query += " OR ";
    }
    if (query.length() > 0){
      query = query.substring(0, query.lastIndexOf(" OR "));
    }
    //logger.info(query);
    UpdateResponse updateResponse = solrServer.deleteByQuery(query);
    //UpdateResponse updateResponse = solrServer.deleteById(ids);
    if (successResponse(updateResponse)){
      return updateResponse.toString();
    }
    return "";
  }

  public Boolean verifyIngest(String layerId) throws Exception {
    SolrQuery query = new SolrQuery();
      query.setQuery("LayerId:" + layerId);
    QueryResponse queryResponse = solrServer.query(query);
    int numFound = Integer.getInteger(queryResponse.getResponseHeader().get("numFound").toString());
    if (numFound == 1){
      return true;
    } else {
      if (numFound > 1){
        throw new Exception("There is more than 1 layer with LayerId:" + layerId);
      } else {
        return false;
      }
    }
  }

  public int add(SolrRecord solrRecord) {
    int status = 0;
    UpdateResponse updateResponse = null;
    try {
      logger.debug("begin adding solr record");
      updateResponse = solrServer.addBean(solrRecord);
      status = updateResponse.getStatus();
      logger.debug("Status code: " + Integer.toString(status));

    } catch (IOException e) {
      logger.error("IO Exception trying to add Bean");
      e.printStackTrace();
    } catch (SolrServerException e) {
      logger.error("SolrServer Exception trying to add Bean");
      e.printStackTrace();
    } catch (SolrException e){
      logger.error("SolrException: SolrRecord values =" + solrRecord.toString());
    } catch (Exception e){
      logger.error("Unknown Exception trying to add Bean");
      e.printStackTrace();
    }
    logger.info("committing add to Solr");
    commit();
    return status;
  };
}
TOP

Related Classes of org.OpenGeoPortal.Solr.SolrJClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.