package solr.index;
import java.io.IOException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* @author xiaozhi
* @version 2010-7-20 下午02:57:04
* @param <T>
*/
@Service("solrjIndexCreater")
public class SolrjIndexCreaterImpl<T> implements SolrjIndexCreater<T>{
private static Log logger = LogFactory.getLog(SolrjIndexCreaterImpl.class);
@Value(value = "#{globalProperties['solr.soTimeOut']}")
private int soTimeOut;
@Value(value = "#{globalProperties['solr.connectionTimeOut']}")
private int connectionTimeOut;
@Value(value = "#{globalProperties['solr.maxConnectionsPerHost']}")
private int maxConnectionsPerHost;
@Value(value = "#{globalProperties['solr.maxTotalConnections']}")
private int maxTotalConnections;
@Value(value = "#{globalProperties['solr.maxRetries']}")
private int maxRetries;
//@Autowired
private ConcurrentUpdateSolrServer concurrentUpdateSolrServer;
/* (non-Javadoc)
* @see com.solr.test.SolrjIndexCreater#addOrUpdateBeans(java.util.List)
*/
@Override
public void addOrUpdateBeans(List<T> items) {
try {
concurrentUpdateSolrServer.addBeans(items);
concurrentUpdateSolrServer.commit();
} catch (SolrServerException e) {
errorHandler(e);
} catch (IOException e) {
errorHandler(e);
}
}
@Override
public void addOrUpdateBean(T item) {
try {
concurrentUpdateSolrServer.addBean(item);
concurrentUpdateSolrServer.commit();
} catch (SolrServerException e) {
errorHandler(e);
} catch (IOException e) {
errorHandler(e);
}
}
@Override
public void optimize() {
try {
concurrentUpdateSolrServer.optimize();
} catch (SolrServerException e) {
errorHandler(e);
} catch (IOException e) {
errorHandler(e);
}
}
/* (non-Javadoc)
* @see com.solr.test.SolrjIndexCreater#deleteDocById(java.lang.String)
*/
@Override
public void deleteDocById(String id) {
concurrentUpdateSolrServer.setRequestWriter(new BinaryRequestWriter());
try {
concurrentUpdateSolrServer.deleteByQuery("id:*"+id);
concurrentUpdateSolrServer.commit();
} catch (SolrServerException e) {
errorHandler(e);
} catch (IOException e) {
errorHandler(e);
}
}
/* (non-Javadoc)
* @see com.solr.test.SolrjIndexCreater#clear()
*/
@Override
public void clear() {
concurrentUpdateSolrServer.setRequestWriter(new BinaryRequestWriter());
try {
concurrentUpdateSolrServer.deleteByQuery("*:*");
concurrentUpdateSolrServer.commit();
} catch (SolrServerException e) {
errorHandler(e);
} catch (IOException e) {
errorHandler(e);
}
}
private void errorHandler(Throwable cause) {
cause.printStackTrace();
}
public void setConcurrentUpdateSolrServer(ConcurrentUpdateSolrServer concurrentUpdateSolrServer) {
this.concurrentUpdateSolrServer = concurrentUpdateSolrServer;
}
}