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());

   }

  }

 }
时间: 2024-08-30 14:51:33

solr分组查询的相关文章

8.4Solr API使用(Result Grouping分组查询)

转载请出自出处:http://eksliang.iteye.com/blog/2169458 一.概述 分组统计查询不同于分组统计(Facet),facet只是简单统计记录数,并不能为每组数据返回实际的数据回来,solr提供的grouping查询能够解决这一问题,也就是说,他除了能分组外,还能把每组数据返回来. 二.语法简介 参考实例一 查询参数如下: q=*:* &group=true &group.field=price 返回结果如下: Solr Grouping参数列表 参数 参数含

solr4.5分组查询、统计功能介绍

说到分组统计估计大家都不会陌生,就是数据库的group by语句,但是当我们采用solr4.5全文检索时,数据库提供再好的sql语句都没有任何的意义了,那么在solr4.5中我们如何做到分组统计呢?其实很简单,下面我们来看看怎么做. 示例场景: 现在有个电子商务网站的产品搜索功能,不同的商家发布不同的产品,我们想通过关键词"手机"去查找不同商家下面有多少有关手机的产品.假设索引库的结构是产品id(id).产品标题(title).产品价格(price).商家id(companyId).

Solr聚合查询

1  分组查询 概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询: 1.1     Facet分组 solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索, Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计. Solr Fact提供了4种类型的Fact <lstname="facet_co

SQL group 分组查询

1.使用group by进行分组查询  在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:  被分组的列 为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例: select courseID,avg(score) as 课程平均成绩 from score group by courseID 例: select studentID as 学员编号,courseID as 内部测试,a

mysql分组查询时,讲多个值合并在一行显示

mysql根据字段进行分组查询时,相同字段的数据,只会显示一个,如果要想让这个字段的所有数据,显示在一行里,可以在查询时用GROUP_CONTAT函数,默认数据合并以逗号,分开

7-08分组查询

这是一个用户表,下面查询一个用户的数量: --查询表的用户数量 SELECT COUNT(*) FROM UserInfo 再查询一下有几个男用户和几个女用户: SELECT COUNT(*) FROM UserInfo WHERE gender=1 SELECT COUNT(*) FROM UserInfo WHERE gender =0 这样其实把它们分成了两个组,gender=1是男用户,gender=0是女用户,但是有些复杂的表,可以分n个组, 这样在用这种方式比较麻烦,就可以用分组查询

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

一句话概括的话,SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言: T-SQL 是在SQL基础上扩展的SQL Server中使用的语言 1,普通查询 #查询Info表中的所有列 select * from Info #查询Info表中的Name和Code列 select Name,Code from Info 2,条件查询 关键字where #查询Info表的左右列 限定范围 列名为p001 select * from Info where 列名="p001" #查询条件之

MySQL时间分组查询

表TESTER 字段:id -- INT    date  -- TIMESTAMP 1.如何按年.月.日分组查询? select DATE_FORMAT(date,'%Y-%m-%d') time, count(*) count from TESTER group by year(date), month(date), day(date); 其中year().month().day()分别是提取date中的年.月.日字段. 2.时间分组查询的效率? 在不建立索引时,我100W行数据进行测试,用

S1/C#语言和数据库技术基础/11-连接查询和分组查询

分组查询 采用分组查询的T-SQL语句如下. SELECT   CourseID,AVG(Score)   AS   课程平均成绩 FROM   Score GROUP   BY   CourseID (1)查询男女学生的人数各是多少 SELECT   COUNT(*)    AS   人数,SSex    FROM   Students GROUP   BY   SSex (2)查询每个年级的总人数 SELECT   COUNT(*)   AS   年级人数,SGrade   FROM   S