solr分组查询、统计功能详解
原文网址:http://www.cnblogs.com/Sonet-life/p/3721667.html
说到分组统计估计大家都不会陌生,就是数据库的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");//每组显示的个数,默认为1solrQuery.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"));}}} }
//获取分组之后的键名和键值,同时放进一个map集合里
Map<String, Integer> info = new HashMap<String, Integer>();
GroupResponse groupResponse = resp.getGroupResponse(); //获取分组结果信息
if(groupResponse != null) { List<GroupCommand> groupList = groupResponse.getValues(); for(GroupCommand groupCommand : groupList) { List<Group> groups = groupCommand.getValues(); for(Group group : groups) { info.put(group.getGroupValue(), (int)group.getResult().getNumFound()); } }
}
solr分组查询、统计功能详解相关推荐
- mysql 分组查询 语句_详解MySQL中的分组查询与连接查询语句
分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...
- 采购管理软件最好的哪个?采购查询功能详解
软件服务交付的速度和准确性是考量的一个重要标准,软件开发公司的后续服务也直接影响使用者的体验,那么选择一款采购管理软件呢?哪一个比较好呢?下面,给大家介绍一下一款采购管理软件,以及它完善的采购查询功能 ...
- 国际短信系统平台后台功能详解-移讯云短信软件
国际短信系统平台后台功能详解-移讯云短信软件 后台登陆首页显示 ⦁ 用户总量记录: 显示总使用户数量 ⦁ 待审核账号数量记录: 等待审核的新用户账号数量 ⦁ 待审核签名数量记录: ...
- mysql获取当天每小时统计_详解mysql 获取某个时间段每一天、每一个小时的统计数据...
获取每一天的统计数据 做项目的时候需要统对项目日志做分析,其中有一个需求是获取某个给定的时间段内,每一天的日志数据,比如说要获取从2018-02-02 09:18:36到2018-03-05 23:1 ...
- wazuh agent功能详解
wazhu之agent功能详解 一.日志数据收集 日志数据收集是从服务器或设备生成的记录中收集的实时过程.此组件可以通过文本文件或Windows事件日志接收日志.它还可以通过远程syslog直接接收日 ...
- 深入mysql慢查询设置的详解
深入mysql慢查询设置的详解 在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较 ...
- mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解
本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...
- MySQL的用户密码过期功能详解
MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...
- 短信平台专业版软件客户端功能详解源码搭建|移讯云短信系统
国际短信平台专业版软件客户端功能详解|移讯云短信系统 首页显示 剩余条数 充值总数 提交总数 成功数量 失败数量 未知数量 代发数量 签名数量 最新提交 平台公告 API接口文档 短信发送 发送短信选 ...
最新文章
- linux uefo引导 win_基于UEFI和GPT模式下U盘安装windows8.1和Linux双启动教程
- java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!
- Linux笔记16.磁盘管理
- 水下机器人_相关知识点
- 计算机编程软文,全盲男孩自学编程,一句话打动无数网友…
- php 数组排序 按值,php – 按值排序数组
- .net remoting的事务传播以及wcf分布式事务
- Arcgis Javascript那些事儿(十二)——geometry service几何服务
- 罗列几个Android插件化开发框架
- android机顶盒root,[Android]机顶盒root脚本:SupersuSU获取完美Root权限万能方法,解决二进制更新问题 | 樱花庄...
- SECS/GEM 产品开发和介绍
- 数学分析教程(科大)——3.4笔记+习题
- 习题4-1 Xiangqi UVA - 1589
- 计算机作业SHOP,面向Job-shop车间最优作业切换的成组调度研究
- C++ Qt 实现小游戏2048
- 在中国移动(中国联通、中国电信)工作是一种怎样的体验?
- app公司制作app的方法和步骤
- Android脑图--Android动画
- Proteus与Keil联调 ARM STM32流水灯
- 118_杨辉三角与杨辉三角II