说到分组统计估计大家都不会陌生,就是数据库的group by语句,但是当我们采用solr4.5全文检索时,数据库提供再好的sql语句都没有任何的意义了,那么在solr4.5中我们如何做到分组统计呢?其实很简单,下面我们来看看怎么做。

示例场景:

现在有个电子商务网站的产品搜索功能,不同的商家发布不同的产品,我们想通过关键词“手机”去查找不同商家下面有多少有关手机的产品。假设索引库的结构是产品id(id)、产品标题(title)、产品价格(price)、商家id(companyId)。

以下示例采用slorj分组统计solr

1、创建一个SolrServer

SolrServer server = new HttpSolrServer("http://127.0.0.1:2001/solr/product");

2、分组查询

SolrQuery solrQuery = new SolrQuery("title:手机");

solrQuery.setParam("group", true);//是否分组

solrQuery.setParam("group.field", "companyId");//分组的域(此处以公司id进行分组)

//solrQuery.setParam("group.query", "price:[0 TO 100]");//还可以根据其他条件进行过滤,如价格在1到100之间

solrQuery.setParam("group.limit", "10");//每组显示的个数,默认为1

solrQuery.setParam("group.ngroups", true);//是否计算所得分组个数;注意:当每个分组显示数目大于1个时,不能用分组数量来计算总页码

//solrQuery.setStart(0); //起始索引值

//solrQuery.setRows(100);//显示几条数据

QueryResponse resp = server.query(solrQuery);

GroupResponse gresp = resp.getGroupResponse();//注意:此处不能再用resp.getResults()接收结果

List<GroupCommand> commands = gresp.getValues();

if(commands != null) {
for(GroupCommand com : commands) { Sysout.out.println("总的分组个数:" + com.getNGroups().longValue()); for(Group group : com.getValues()) { SolrDocumentList hits = group.getResult(); for(SolrDocument doc : hits) { System.out.println("id: " + (String)doc.getFieldValue("id") + ", title: " +  (String)doc.getFieldValue("title") + ", price: " +  (Float)doc.getFieldValue("price")); } } }
}

3、实际的应用

相信使用过淘宝搜索功能的人都会注意到一个细小却又很重要的功能–“合并卖家”,如果使用solr就可以采用分组功能来实现。淘宝截图:

本文出自 luoshengsha.com,欢迎转载,转载时请注明出处及相应链接。

本文永久链接:http://www.luoshengsha.com/319.html

solr4.5分组查询、统计功能介绍的更多相关文章

  1. rails小技巧之分组查询统计并去重

    分组查询并统计 SpecialGroup.group(:special_type).count select special_type,count(*) from special_groups gro ...

  2. 借助case,实现更丰富的分组查询统计

    根据fileD6的前4位分组    分别统计该组  5种企业类型fileD31的数量 create or replace view jyjc_bycity as select substr(fileD ...

  3. Linq分组查询统计

    这里介绍Linq使用Group By和Count得到每个CategoryID中产品的数量,Linq使用Group By和Count得到每个CategoryID中断货产品的数量等方面. 学经常会遇到Li ...

  4. MySQL分组查询统计

    GROUP BY 1.有个店铺表,字段为区域id,设备数量,店铺名称,如下: 2.如何按区域 district 统计 每个区域的设备数量,SQL如下 SELECT district, SUM( dev ...

  5. oracle-按年、月、周、日、时、分 分组查询统计数据,无数据补零(connect by)

    目的:统计一段时间内每年.每月.每周.每日.每时.每分数据,无数据时自动补零 思路:1. 生成给定时间段对应日期 2. 将原表中该时间段内的不为0的数据量统计出来 3. 用left join连接起来, ...

  6. linq 多表分组查询统计

    var q1 = from orderitem in q2 join pd in _iProductDetailContract.Entities on orderitem.ProductDetail ...

  7. CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏

    CASE函数   作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...

  8. Group by 分组查询 实战

    实战经历,由于本人在共享单车上班,我们的单车管理模块,可以根据单车号查询单车,但是单车号没有设置unique(独一无二约束),说以这就增加了单车号可能重复的风险,但是一般情况下,单车号是不会重复的,因 ...

  9. SQL分组查询及聚集函数的使用

    今天要做一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计sql语句,才发现自己sql分组查询及聚集函数没学好:其实就是group by子句和几个聚集函数,熟练使用统计功能很简单.在此总结下今 ...

随机推荐

  1. Web Service中的XFire 传输List 自定义对象.

    我把这个创建的步骤和代码的贴出来,. 首先新建一个工程,取名就随便点啦..MyWebService,然后复制jar包到lib目录下, 创建包,建立接口..写一个javaBean的类, 以下是一个简单的 ...

  2. 使用 AngularJS 和 ReactJS 的经验

    1. React 福音 当我们的团队开始寻找一个合适的前端框架的时候,我们考虑了许多选择,最后留下两个选项 —— Angular 和 React. Angular 是目前为止最成熟的方案:它拥有一个庞 ...

  3. Asp.net MVC razor语法参考

    Razor语法的快捷参考http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/ 只是copy下来便于查阅! I ...

  4. C++输入和输出

    本文转载:blog.csdn.net/zhanghaotian2011/article/details/8868577博客 输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出 ...

  5. AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表

    代码请见SimpleAdapterDemo.zip. 步骤如下: 1.创建主布局文件 <RelativeLayout xmlns:android="http://schemas.and ...

  6. PHP返回JSON和XML类

    <?php class Reponse{ //private $result = array('code'=null,'message'=null,'data'=>null); /** * ...

  7. Lwip lwip_recvfrom函数一个数据包不能分多次读取。

    最近在写一个基于Lwip协议栈的网络程序,对于一包数据,想先获得包头信息,再根据包头信息读取后面的数据,但是调用recvfrom后,发现读取后面的数据读取不到,进一步查阅发现,原来对于UDP协议,一次 ...

  8. SQL Server 文件自动增长那些事

    方法 1. 把文件的增长设置为按照固定大小增长. 如filegrowth = 100MB; ------------------------------------------------------ ...

  9. MYSQL 查看表定义的 4 种方法

    方法 1. show create table table_name;可以用这个看表的代码. show create table Strings; 方法 2. show full columns fr ...

  10. Nginx 配置指令的执行顺序(四)

    ngx_lua 模块提供了配置指令 access_by_lua,用于在 access 请求处理阶段插入用户 Lua 代码.这条指令运行于 access 阶段的末尾,因此总是在 allow 和 deny ...