/**
* 通联支付-研发中心
* @author zhanggh
* 2014-7-7
* version 1.0
* 说明:solr客户端工具
*/
package com.mtools.core.plugin.solr;
import java.io.IOException;
import java.util.List;
import javax.annotation.Resource;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.stereotype.Component;
import com.google.common.collect.Lists;
import com.mtools.core.plugin.BasePlugin;
import com.mtools.core.plugin.entity.PageInfo;
import com.mtools.core.plugin.helper.FuncUtil;
import com.mtools.core.plugin.properties.CoreParams;
/**
* 功能:
*
* @date 2014-7-7
*/
@Component("solrClientPlugin")
public class SolrClientPlugin<T> extends BasePlugin {
// private String solrUrl = "http://172.16.1.12:8983/solr";
private HttpSolrServer server = null;
public void initSolr() {
server = new HttpSolrServer(coreParams.solrUrl);
}
public boolean addOrUpdateIndex(T t) {
try {
server.addBean(t);
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean batchCreateIndexs(List<T> objs) {
try {
server.addBeans(objs);
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
@SuppressWarnings("unchecked")
public List<T> solrQuery(String keyword, String belong, PageInfo page,
Class<T> clz) {
List<T> list = Lists.newArrayList();
try {
int start = (Integer.parseInt(page.getPageIndex()) - 1)
* Integer.parseInt(page.getPageSize());
SolrQuery query = new SolrQuery(keyword);
query.setParam("fq", "belong:" + belong);
query.setStart(start).setRows(Integer.parseInt(page.getPageSize()));
QueryResponse resp = server.query(query);
// 查询出来的结果都保存在SolrDocumentList中
list = resp.getBeans(clz);
page.setItemCount(Integer.parseInt(String.valueOf(resp.getResults()
.getNumFound())));
} catch (SolrServerException e) {
e.printStackTrace();
}
return list;
}
@SuppressWarnings("unchecked")
public SolrDocumentList solrQueryExt(String keyword, String belong,
PageInfo page) {
SolrDocumentList sdl = null;
try {
int start = (Integer.parseInt(page.getPageIndex()) - 1)
* Integer.parseInt(page.getPageSize());
SolrQuery query = new SolrQuery(keyword);
if(!FuncUtil.isEmpty(belong)){
query.setParam("fq", "belong:" + belong);
}
query.setStart(start).setRows(Integer.parseInt(page.getPageSize()));
QueryResponse resp = server.query(query);
// 查询出来的结果都保存在SolrDocumentList中
sdl = resp.getResults();
System.out.println(sdl.getNumFound());
page.setItemCount(Integer.parseInt(String.valueOf(sdl.getNumFound())));
} catch (SolrServerException e) {
e.printStackTrace();
}
return sdl;
}
/**
* 功能:删除索引
* 2014-7-18
*/
public boolean deleteIndexs(List<String> ids) throws SolrServerException, IOException{
log.info("删除索引");
server.deleteById(ids);
server.commit();
return true;
}
/**
* 功能:删除索引
* 2014-7-18
*/
public boolean deleteIndex(String id) throws SolrServerException, IOException{
log.info("删除单个索引id:"+id);
server.deleteById(id);
server.commit();
return true;
}
/**
* 功能:删除所有索引
* 2014-7-21
* @throws IOException
* @throws SolrServerException
*/
public void removeAll() throws SolrServerException, IOException {
log.info("删除全部索引");
server.deleteByQuery("*:*");
server.commit();
log.info("删除全部索引完成");
}
}