package zh.solr.se.searcher; import javax.servlet.http.HttpServletRequest; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.request.SolrQueryResponse; import org.apache.solr.request.SolrRequestHandler; import zh.solr.se.searcher.solr.SolrUtil; public class DefaultSearchService { /** * This is the default implementation of search service, i.e., no customization * It behave exactly same as regular Solr server. * @param req * @param handler * @param solrReq * @param solrResp */ public void execute(HttpServletRequest req, SolrRequestHandler handler, SolrQueryRequest solrReq, SolrQueryResponse solrResp) { doDefaultSearch(handler, solrReq, solrResp); //add solr_host_name to response String hostName = SolrUtil.getHostName(); if(null != hostName) SolrUtil.setResponseHeaderParam(solrResp, SolrUtil.SOLR_NAME_RESPONE_SOLR_SERVER_HOSTNAME, hostName); } protected void doDefaultSearch(SolrRequestHandler handler, SolrQueryRequest solrReq, SolrQueryResponse solrResp) { // Don't make any change here!!! This has to be the default search behavior solrReq.getCore().execute(handler, solrReq, solrResp); } /** * Do a Solr query using the give query string * @param handler Solr handler to use * @param solrReq Solr request, need to override the query parameter with the give query string * @param solrResp Solr response to use * @param query the Solr query string to use * @return the result object, which could be DocSlice or SolrDocumentSet */ protected Object doSolrQuery(SolrRequestHandler handler, SolrQueryRequest solrReq, SolrQueryResponse solrResp, String query) { if (query == null || query.length() == 0) return null; SolrUtil.setSolrRequestParam(solrReq, SolrUtil.PARAM_NAME_QUERY, query); doDefaultSearch(handler, solrReq, solrResp); return solrResp.getValues().get(SolrUtil.SOLR_NAME_RESPONSE_RESULT); } }