码迷,mamicode.com
首页 > 其他好文 > 详细

solr分组查询

时间:2015-08-31 17:37:21      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:

solr分组查询

public static void queryDataTemp() {

  List<Map<String, Object>> returnList = new ArrayList<Map<String, Object>>();

  

  SolrQuery query = new SolrQuery("哈哈");

  query.setParam("qf", "residence_addr owner_name");

  query.setParam("defType", "edismax");//查询handler的类型,即查询解析器,如果要使用权重排序,至少要用dismax解析器,edismax还可以使用bf,即函数

  query.setParam("q.op", "OR"); //默认是OR

  

  //查出的结果按照native_addr分组,并且得到分组后的数量

  //setFacetMinCount(1):数量至少大于1才显示

  //setFacetLimit(3):只显示3条记录

  query.setFacet(true).setFacetMinCount(1).setFacetLimit(3).addFacetField("native_addr");

  

  try {

   QueryResponse resp = solrServer.query(query);

   SolrDocumentList docList = resp.getResults();

   

   List<FacetField> facets = resp.getFacetFields();

   for(FacetField facet : facets) {

    System.out.println(facet.getName() + ":" + facet.getValueCount());

    List<Count> values = facet.getValues();

    for(Count c : values) {

     System.out.println(c.getName() + ":" + c.getCount());

    }

   }

   

   for(SolrDocument doc : docList) {

    Collection<String> fieldNameList = doc.getFieldNames();

    

    TreeMap<String, Object> result = new TreeMap<String, Object>();

    

    for(String fieldName : fieldNameList) {

     result.put(fieldName, doc.get(fieldName));

    }

    

    returnList.add(result);

   }

  } catch (SolrServerException e) {

   e.printStackTrace();

  } finally {

   query.clear();

  }

  

  for(Map<String, Object> map : returnList) {

   Iterator<Entry<String, Object>> it = map.entrySet().iterator();

   while(it.hasNext()) {

    Entry<String, Object> e = it.next();

    System.out.println(e.getKey() + ":" + e.getValue());

   }

  }

 }

solr分组查询

标签:

原文地址:http://my.oschina.net/sniperLi/blog/499681

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!