标签:
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());
}
}
}
标签:
原文地址:http://my.oschina.net/sniperLi/blog/499681