项目(评论)中使用solr查询的时候,有个场景需求:
1、获取某个商品下评论的级别数量统计(比如该商品下一到五颗星的评论数量各有多少);
最终经过讨论,使用了solr中的group和facet完成
先说下solr中保存的文档数据结构,如下:
<!--只截取文档数据中的一部分字段--> <doc> <long name="id">39119552</long> <str name="commodityCode">000000000999999999</str> <str name="commodityName">商品名称</str> <str name="character1">400g</str> <str name="character1GroupName">颜色</str> <str name="reviewContent">好产品,配送快,专业,就是好!!</str> <arr name="labelNames"> <str>大品牌</str> <str>很新鲜</str> </arr> <int name="qualityStar">5</int> <date name="createTime">2014-08-14T07:43:00.076Z</date></doc>
一、使用solr中的group查询(类似于sql中的group by查询)
这里我直接贴出来代码,详情请参考代码中的注释:
public static void main(String[] args) throws SolrServerException { // 获取solr服务的连接 HttpSolrServer solrServer = new HttpSolrServer("http://127.0.0.1:8080/solr/commodityReview"); // 根据商品类型,拼接查询规则 SolrQuery query = new SolrQuery("commodityCode:000000000101236624"); // 设置通过facet查询为true,表示查询时使用facet机制 query.setParam(GroupParams.GROUP, true); query.setParam(GroupParams.GROUP_FIELD, "qualityStar"); // 设置每个qualityStar对应的 query.setParam(GroupParams.GROUP_LIMIT, "0"); // 设置返回doc文档数据,因只需要数量,故设置为0 query.setRows(10); QueryResponse response = solrServer.query(query); if (response != null) { GroupResponse groupResponse = response.getGroupResponse(); if(groupResponse != null) { List<GroupCommand> groupList = groupResponse.getValues(); for(GroupCommand groupCommand : groupList) { List<Group> groups = groupCommand.getValues(); for(Group group : groups) { System.out.println("group查询...该商品下,"+group.getGroupValue()+"颗星的数量为:"+group.getResult().getNumFound()); } } } } } /*程序执行结果如下: group查询...该商品下,5颗星的数量为:6744 group查询...该商品下,3颗星的数量为:709 group查询...该商品下,4颗星的数量为:4613 group查询...该商品下,2颗星的数量为:29 group查询...该商品下,1颗星的数量为:41 */
二、使用solr中的facet进行查询:
下面程序显示如何使用solr提供的java api-solrj进行查询,代码如下:
public static void main(String[] args) throws SolrServerException { // 获取solr服务的连接 HttpSolrServer solrServer = new HttpSolrServer("http://127.0.0.1:8080/solr/commodityReview"); // 根据商品类型,拼接查询规则 SolrQuery query = new SolrQuery("commodityCode:000000000101236624"); // 设置通过facet查询为true,表示查询时使用facet机制 query.setFacet(true); // 设置facet的字段名称是 query.set("facet.field","star"); // 因为我知道数据中星级只有1-5,所以就没有指定每组返回的条数,如果需要设置如下: // query.setFacetLimit(num); // 设置统计后数量大于等于1才返回 query.setFacetMinCount(1); // 设置返回doc文档数据,因只需要数量,故设置为0 query.setRows(0); QueryResponse response = solrServer.query(query); if (response != null) { FacetField facetField = response.getFacetField(SolrConstants.QUALITYSTAR); List<Count> countList = null; if (facetField != null) { countList = facetField.getValues(); if (countList != null) { for (Count count : countList) { System.out.println("该商品下,"+count.getName()+"颗星的数量为:"+count.getCount()); } } } } } /*程序执行结果如下: 该商品下,5颗星的数量为:6744 该商品下,4颗星的数量为:4613 该商品下,3颗星的数量为:709 该商品下,1颗星的数量为:41 该商品下,2颗星的数量为:29 */
因为group 查询和facet查询返回的结果集有差别,所以在设置返回条数时有一定的区别,具体返回的结果集是怎么样的,可以debug一下看看,我就不说了
上面可以发现,同一种场景需求,既可以使用solr中的group查询,也可以使用solr中的facet查询,二者有什么区别呢?等我下一次更新博客再说吧,现在我也不是非常清楚。
相关推荐
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
在本套课程中,我们将全面的讲解Solr,从Solr基础到Solr高级,再到项目实战,基本上涵盖了Solr中所有的知识点。 主讲内容 章节一:Solr基础(上) 1. 环境搭建 2. 核心讲解 3. 数据导入 4. 各种中文分析器 章节二:...
通过`group.field`参数设置分组字段,`group.ngroups`获取总分组数,`group.facet`可以结合faceted search进一步细化。 4. **参数配置**:Solr的灵活性体现在其丰富的配置选项上,每个功能都有一系列参数可以调整。...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...
Solr集群安装与配置(一)第11讲 Solr集群安装与配置(二)第12讲 SolrCloud基本概念第13讲 Solrj操作SolrCloud第14讲 solr索引主从同步第15讲 solr之Facet第16讲 solr之FacetPivot第17讲 solr之Group第18讲 solr之...