|  | @ -0,0 +1,416 @@
 | 
												
													
														
															|  | 
 |  | eeepackage com.yihu.base;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import org.apache.commons.lang3.StringUtils;
 | 
												
													
														
															|  | 
 |  | import org.apache.solr.client.solrj.SolrClient;
 | 
												
													
														
															|  | 
 |  | import org.apache.solr.client.solrj.SolrQuery;
 | 
												
													
														
															|  | 
 |  | import org.apache.solr.client.solrj.response.*;
 | 
												
													
														
															|  | 
 |  | import org.apache.solr.common.SolrDocumentList;
 | 
												
													
														
															|  | 
 |  | import org.apache.solr.common.params.FacetParams;
 | 
												
													
														
															|  | 
 |  | import org.apache.solr.common.util.NamedList;
 | 
												
													
														
															|  | 
 |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
												
													
														
															|  | 
 |  | import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 | 
												
													
														
															|  | 
 |  | import org.springframework.context.annotation.Scope;
 | 
												
													
														
															|  | 
 |  | import org.springframework.stereotype.Service;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import java.util.Date;
 | 
												
													
														
															|  | 
 |  | import java.util.HashMap;
 | 
												
													
														
															|  | 
 |  | import java.util.List;
 | 
												
													
														
															|  | 
 |  | import java.util.Map;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | /**
 | 
												
													
														
															|  | 
 |  |  * Solr底层查询类
 | 
												
													
														
															|  | 
 |  |  *
 | 
												
													
														
															|  | 
 |  |  * @author hzp
 | 
												
													
														
															|  | 
 |  |  * @version 1.0
 | 
												
													
														
															|  | 
 |  |  * @created 2016.04.26
 | 
												
													
														
															|  | 
 |  |  */
 | 
												
													
														
															|  | 
 |  | @Service
 | 
												
													
														
															|  | 
 |  | @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
 | 
												
													
														
															|  | 
 |  | public class SolrUtil {
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     SolrPool pool;
 | 
												
													
														
															|  | 
 |  |     private final static String ASC = "asc";
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 获取查询耗时
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     private int qtime;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     private int getQtime() {
 | 
												
													
														
															|  | 
 |  |         return qtime;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /************************** 查询操作 *****************************************************/
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 简单查询方法
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public SolrDocumentList query(String tablename, String q, Map<String, String> sort, long start, long rows) throws Exception {
 | 
												
													
														
															|  | 
 |  |         return query(tablename, q, null, sort, start, rows);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * Solr查询方法
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param q     查询字符串
 | 
												
													
														
															|  | 
 |  |      * @param fq    过滤查询
 | 
												
													
														
															|  | 
 |  |      * @param sort  过滤条件
 | 
												
													
														
															|  | 
 |  |      * @param start 查询起始行
 | 
												
													
														
															|  | 
 |  |      * @param rows  查询行数
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public SolrDocumentList query(String core, String q, String fq, Map<String, String> sort, long start, long rows) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  |         if (null != q && !q.equals("")) //设置查询条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setQuery(q);
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         if (null != fq && !fq.equals("")) //设置过滤条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setStart(Integer.parseInt(String.valueOf(start)));//设置查询起始行
 | 
												
													
														
															|  | 
 |  |         query.setRows(Integer.parseInt(String.valueOf(rows)));//设置查询行数
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         //设置排序
 | 
												
													
														
															|  | 
 |  |         if (sort != null) {
 | 
												
													
														
															|  | 
 |  |             for (Object co : sort.keySet()) {
 | 
												
													
														
															|  | 
 |  |                 if (ASC == sort.get(co).toLowerCase() || ASC.equals(sort.get(co).toLowerCase())) {
 | 
												
													
														
															|  | 
 |  |                     query.addSort(co.toString(), SolrQuery.ORDER.asc);
 | 
												
													
														
															|  | 
 |  |                 } else {
 | 
												
													
														
															|  | 
 |  |                     query.addSort(co.toString(), SolrQuery.ORDER.desc);
 | 
												
													
														
															|  | 
 |  |                 }
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         qtime = rsp.getQTime();
 | 
												
													
														
															|  | 
 |  |         System.out.print("Solr Query Time:" + qtime);
 | 
												
													
														
															|  | 
 |  |         SolrDocumentList docs = rsp.getResults();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         pool.close(core); //释放连接
 | 
												
													
														
															|  | 
 |  |         return docs;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /******************************* Count 统计 ***********************************************/
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 总数查询方法
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public long count(String core, String q) throws Exception {
 | 
												
													
														
															|  | 
 |  |         return count(core, q, null);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 总数查询方法
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public long count(String core, String q, String fq) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  |         if (null != q && !q.equals("")) //设置查询条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setQuery(q);
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         if (null != fq && !fq.equals("")) //设置过滤条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         query.setStart(0);
 | 
												
													
														
															|  | 
 |  |         query.setRows(0);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         Integer start =  (int)rsp.getResults().getNumFound();
 | 
												
													
														
															|  | 
 |  |         query.setStart(start);
 | 
												
													
														
															|  | 
 |  |         rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         qtime = rsp.getQTime();
 | 
												
													
														
															|  | 
 |  |         System.out.print("Solr Count Time:" + qtime);
 | 
												
													
														
															|  | 
 |  |         SolrDocumentList docs = rsp.getResults();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         pool.close(core);
 | 
												
													
														
															|  | 
 |  |         return docs.getNumFound();
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 单组分组Count统计(start从0开始)
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public Map<String, Long> groupCount(String core, String q, String fq, String groupField, int start, int rows) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  |         if (null != q && !q.equals("")) //设置查询条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setQuery(q);
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         if (null != fq && !fq.equals("")) //设置过滤条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setFacet(true);//设置facet=on
 | 
												
													
														
															|  | 
 |  |         query.setRows(0);
 | 
												
													
														
															|  | 
 |  |         query.addFacetField(groupField);
 | 
												
													
														
															|  | 
 |  |         query.setFacetLimit(rows);//限制每次返回结果数
 | 
												
													
														
															|  | 
 |  |         query.set(FacetParams.FACET_OFFSET, start);
 | 
												
													
														
															|  | 
 |  |         query.setFacetMissing(false);//不统计null的值
 | 
												
													
														
															|  | 
 |  |         query.setFacetMinCount(0);// 设置返回的数据中每个分组的数据最小值,比如设置为0,则统计数量最小为0,不然不显示
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         List<FacetField.Count> countList = rsp.getFacetField(groupField).getValues();
 | 
												
													
														
															|  | 
 |  |         qtime = rsp.getQTime();
 | 
												
													
														
															|  | 
 |  |         System.out.print("Solr Group Time:" + qtime);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         Map<String, Long> rmap = new HashMap<String, Long>();
 | 
												
													
														
															|  | 
 |  |         for (FacetField.Count count : countList) {
 | 
												
													
														
															|  | 
 |  |             if (count.getCount() > 0)
 | 
												
													
														
															|  | 
 |  |                 rmap.put(count.getName(), (long) count.getCount());
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         pool.close(core);
 | 
												
													
														
															|  | 
 |  |         return rmap;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 多组分组Count(独立计算)
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public List<FacetField> groupCount(String core, String q, String fq, String[] groups) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  |         if (null != q && !q.equals("")) //设置查询条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setQuery(q);
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         if (null != fq && !fq.equals("")) //设置过滤条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setFacet(true);//设置facet=on
 | 
												
													
														
															|  | 
 |  |         query.setRows(0);
 | 
												
													
														
															|  | 
 |  |         query.addFacetField(groups);
 | 
												
													
														
															|  | 
 |  |         query.setFacetLimit(1000);//限制每次返回结果数
 | 
												
													
														
															|  | 
 |  |         query.set(FacetParams.FACET_OFFSET, 0);
 | 
												
													
														
															|  | 
 |  |         query.setFacetMissing(true);//不统计null的值
 | 
												
													
														
															|  | 
 |  |         query.setFacetMinCount(0);// 设置返回的数据中每个分组的数据最小值,比如设置为0,则统计数量最小为0,不然不显示
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         qtime = rsp.getQTime();
 | 
												
													
														
															|  | 
 |  |         System.out.print("Solr Group Time:" + qtime);
 | 
												
													
														
															|  | 
 |  |         List<FacetField> facets = rsp.getFacetFields();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         pool.close(core);
 | 
												
													
														
															|  | 
 |  |         return facets;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 多组分组Count统计(关联计算)
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public List<PivotField> groupCountMult(String core, String q, String fq, String groupFields, int start, int rows) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  |         if (null != q && !q.equals("")) //设置查询条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setQuery(q);
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         if (null != fq && !fq.equals("")) //设置过滤条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setFacet(true);//设置facet=on
 | 
												
													
														
															|  | 
 |  |         query.setRows(0);
 | 
												
													
														
															|  | 
 |  |         query.addFacetPivotField(groupFields);
 | 
												
													
														
															|  | 
 |  |         query.setFacetLimit(rows);//限制每次返回结果数
 | 
												
													
														
															|  | 
 |  |         query.setFacetMissing(false);//不统计null的值
 | 
												
													
														
															|  | 
 |  |         query.setFacetMinCount(0);// 设置返回的数据中每个分组的数据最小值,比如设置为0,则统计数量最小为0,不然不显示
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         qtime = rsp.getQTime();
 | 
												
													
														
															|  | 
 |  |         System.out.print("Solr Group Time:" + qtime);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         NamedList<List<PivotField>> namedList = rsp.getFacetPivot();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         pool.close(core);
 | 
												
													
														
															|  | 
 |  |         if (namedList != null && namedList.size() > 0) {
 | 
												
													
														
															|  | 
 |  |             return namedList.getVal(0);
 | 
												
													
														
															|  | 
 |  |         } else
 | 
												
													
														
															|  | 
 |  |             return null;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**************************** 数值统计 ******************************************/
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 分组数值统计
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param core       表名
 | 
												
													
														
															|  | 
 |  |      * @param q          查询条件
 | 
												
													
														
															|  | 
 |  |      * @param statsField 统计字段
 | 
												
													
														
															|  | 
 |  |      * @param groupField 分组字段
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public List<FieldStatsInfo> getStats(String core, String q, String fq, String statsField, String groupField) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  |         if (null != q && !q.equals("")) //设置查询条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setQuery(q);
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         if (null != fq && !fq.equals("")) //设置过滤条件
 | 
												
													
														
															|  | 
 |  |         {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.addGetFieldStatistics(statsField);
 | 
												
													
														
															|  | 
 |  |         query.addStatsFieldFacets(statsField, groupField);
 | 
												
													
														
															|  | 
 |  |         query.setRows(0);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse rsp = conn.query(query);
 | 
												
													
														
															|  | 
 |  |         qtime = rsp.getQTime();
 | 
												
													
														
															|  | 
 |  |         System.out.print("Solr Stats Time:" + qtime);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         Map<String, FieldStatsInfo> stats = rsp.getFieldStatsInfo();
 | 
												
													
														
															|  | 
 |  |         pool.close(core);
 | 
												
													
														
															|  | 
 |  |         if (stats != null && stats.size() > 0) {
 | 
												
													
														
															|  | 
 |  |             Map<String, List<FieldStatsInfo>> map = stats.get(statsField).getFacets();
 | 
												
													
														
															|  | 
 |  |             if (map != null) {
 | 
												
													
														
															|  | 
 |  |                 return map.get(groupField);
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return null;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 查询统计
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param core       表名
 | 
												
													
														
															|  | 
 |  |      * @param facetQuery 查询条件
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public Map<String, Integer> getFacetQuery(String core, String facetQuery) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  |         query.setFacet(true);
 | 
												
													
														
															|  | 
 |  |         query.addFacetQuery(facetQuery);
 | 
												
													
														
															|  | 
 |  |         QueryResponse resp = conn.query(query);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return resp.getFacetQuery();
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 单字段分组统计
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param core
 | 
												
													
														
															|  | 
 |  |      * @param facetField
 | 
												
													
														
															|  | 
 |  |      * @param fq
 | 
												
													
														
															|  | 
 |  |      * @param minCount
 | 
												
													
														
															|  | 
 |  |      * @param start
 | 
												
													
														
															|  | 
 |  |      * @param limit
 | 
												
													
														
															|  | 
 |  |      * @param missing
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public FacetField getFacetField(String core, String facetField, String fq, int minCount, int start, int limit, boolean missing) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         if (!StringUtils.isBlank(fq)) {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setStart(start)
 | 
												
													
														
															|  | 
 |  |                 .setRows(0)
 | 
												
													
														
															|  | 
 |  |                 .setFacet(true)
 | 
												
													
														
															|  | 
 |  |                 .addFacetField(facetField)
 | 
												
													
														
															|  | 
 |  |                 .setFacetMinCount(minCount)
 | 
												
													
														
															|  | 
 |  |                 .setFacetLimit(limit)
 | 
												
													
														
															|  | 
 |  |                 .setFacetMissing(missing);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         QueryResponse resp = conn.query(query);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return resp.getFacetField(facetField);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 日期范围分组统计
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param core
 | 
												
													
														
															|  | 
 |  |      * @param dateField
 | 
												
													
														
															|  | 
 |  |      * @param startTime
 | 
												
													
														
															|  | 
 |  |      * @param endTime
 | 
												
													
														
															|  | 
 |  |      * @param grap
 | 
												
													
														
															|  | 
 |  |      * @param fq
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public List<RangeFacet> getFacetDateRange(String core, String dateField, Date startTime, Date endTime, String grap, String fq) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         if (!StringUtils.isBlank(fq)) {
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setRows(0)
 | 
												
													
														
															|  | 
 |  |                .setFacet(true)
 | 
												
													
														
															|  | 
 |  |                .addDateRangeFacet(dateField, startTime, endTime, grap);
 | 
												
													
														
															|  | 
 |  |         QueryResponse resp = conn.query(query);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return resp.getFacetRanges();
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 数值型字段范围统计
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param core
 | 
												
													
														
															|  | 
 |  |      * @param numField
 | 
												
													
														
															|  | 
 |  |      * @param start
 | 
												
													
														
															|  | 
 |  |      * @param end
 | 
												
													
														
															|  | 
 |  |      * @param grap
 | 
												
													
														
															|  | 
 |  |      * @param fq
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public List<RangeFacet> getFacetNumRange(String core, String numField, int start, int end, int grap, String fq) throws Exception {
 | 
												
													
														
															|  | 
 |  |         SolrClient conn = pool.getConnection(core);
 | 
												
													
														
															|  | 
 |  |         SolrQuery query = new SolrQuery();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setQuery("*:*");
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         if (!StringUtils.isBlank(fq)) {
 | 
												
													
														
															|  | 
 |  |             query.setFilterQueries(fq);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         query.setRows(0)
 | 
												
													
														
															|  | 
 |  |                 .setFacet(true)
 | 
												
													
														
															|  | 
 |  |                 .addNumericRangeFacet(numField, start, end, grap);
 | 
												
													
														
															|  | 
 |  |         QueryResponse resp = conn.query(query);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return resp.getFacetRanges();
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | }
 |