package com.easy.custom.handler; import org.apache.solr.common.SolrException; import org.apache.solr.common.params.CommonParams; import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.handler.RequestHandlerBase; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.response.SolrQueryResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; /** * Created by qindongliang on 2016/5/11. */ public class MyHandler extends RequestHandlerBase { final static Logger log= LoggerFactory.getLogger(MyHandler.class); //统计指标,请求次数 volatile long numRequests; //统计指标,总耗时 volatile long totalTime; //统计指标,总请求出错次数 volatile long numErrors; //从solrconfig.xml里面传过来的参数 List<String> words; @Override public void init(NamedList args) { words=((NamedList)args.get("words")).getAll("word"); if(words.isEmpty()){ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,"至少有一个参数"); } super.init(args); } @Override public void handleRequestBody(SolrQueryRequest solrQueryRequest, SolrQueryResponse solrQueryResponse) throws Exception { numRequests++; long startTime=System.currentTimeMillis(); try{ HashMap<String,Integer> counts=new HashMap<String, Integer>(); SolrParams params=solrQueryRequest.getParams(); String q=params.get(CommonParams.Q);//从url中得到q参数 for(String text:q.split(" ")){ if(words.contains(text)){ Integer ct=counts.containsKey(text)?counts.get(text):0; counts.put(text,ct+1); }else{ log.warn("过滤掉此单词:{}",text); } } NamedList<Integer> re=new NamedList<Integer>(); for(String word:words){ re.add(word,counts.get(word)); } solrQueryResponse.add("results",re); }catch (Exception e){ numErrors++; log.error("统计出错: ",e.getMessage()); }finally { totalTime+=System.currentTimeMillis()-startTime; } } @Override public String getDescription() { return "三劫散仙"; } @Override public String getVersion() { return "1.0"; } @Override public String getSource() { return "http://qindongliang.iteye.com/"; } @Override public NamedList<Object> getStatistics() { NamedList all=new SimpleOrderedMap(); all.add("requests count",numRequests); all.add("errors count",numErrors); all.add("totalTimes(ms)",totalTime); return all; } }