SolrCloud统计功能小记

因为需要在自己的搜索系统中增加一些统计分析的功能,而当前的数据及所有都是通过solrcloud本身存储,因此,必须使用solrcloud实现一些常见的统计功能。

下面介绍下自己使用solrcloud实现的几个统计小案例:


1、统计每个月存储的邮件数量:

实现代码:

                   QueryResponsequery = null;

                            CloudSolrServersolrcloud = EmailSolrCloudInstance.getInstance(ZkServerConfig.EmailCollection);

                  

                            ModifiableSolrParamsparams = newModifiableSolrParams(); 

                            params.set("shards.tolerant", true);

                            SolrQueryfilterQuery = new SolrQuery("type:email"); 

                       filterQuery.setFacet(true);

                       filterQuery.setParam("facet.date", "timestamp");

                       filterQuery.setParam("facet.date.start", "2013-02-01T00:00:00Z");

                       filterQuery.setParam("facet.date.end", "2014-02-01T00:00:00Z");

                       filterQuery.setParam("facet.date.gap", "+1MONTH");

                            params.add(filterQuery); 

                            query= solrcloud.query(params);

                            System.out.println("查询表达式:" +params.toString());

                            List<FacetField>facets = query.getFacetDates();

                            for (FacetField facet : facets) {

                            System.out.println(facet.getName());

                                     System.out.println("----------------");

                                     List<Count>counts = facet.getValues();

                                     for (Count count : counts) {

                                               System.out.println(count.getName() + ":" + count.getCount());

                                     }

                                     System.out.println();

                            }

2、统计聊天信息各类聊天信息的数量

List<FacetField> facets = null;

                   try {

                            CloudSolrServersolrcloud = EMLSolrCloudInstance.getInstance(ZkServerConfig.IMCollection);

 

                            SolrQueryquery = new SolrQuery();//建立一个新的查询

                            query.setQuery("type:msn OR type:qq OR type:icq OR type:gtalk");

                            query.setFacet(true);//设置facet=on

                            query.addFacetField(new String[] { "type"});//设置需要facet的字段

                            query.setFacetLimit(10);//限制facet返回的数量

                            QueryResponseresponse = solrcloud.query(query);

                             facets = response.getFacetFields();//返回的facet列表

                             System.out.println(facets);

                             for(int i=0;i<facets.size();i++){

                                      

                                      FacetField facetField = facets.get(i);

                                      List<Count> countValue = facetField.getValues();

                                      for(int j=0;j<countValue.size();j++){

                                                

                                                Count count = countValue.get(i);

                                                System.out.println("名称"+count.getName());

                                                System.out.println("统计结果"+count.getCount());

                                      }

                             }

3、统计每个分组中某个字段的和(比如统计淘宝每个月的交易量)

QueryResponse query = null;

                   List<FieldStatsInfo>list = null;

                            try {

                                     CloudSolrServersolrcloud = EMLSolrCloudInstance.getInstance(ZkServerConfig.BTAOBAOCollection);

 

                                     ModifiableSolrParamsparams = newModifiableSolrParams(); 

                                     params.set("shards.tolerant", true);

                                     //SolrQuery filterQuery = newSolrQuery("type:ALIBI");

                                     SolrQueryfilterQuery = newSolrQuery(queryStr);

                                     filterQuery.setFacet(true);

                                     //filterQuery.setParam("fq", "timestamp:[2013-02-01T00:00:00ZTO 2015-02-01T00:00:00Z]");

                                     filterQuery.setParam("fq", fq);

                                     filterQuery.setParam("stats", "on");

                                     filterQuery.setParam("stats.field", "price");

                                     filterQuery.setParam("stats.facet", "sendTime");

                                     params.add(filterQuery); 

                                     query= solrcloud.query(params);                     

                                     Map<String,FieldStatsInfo> info = query.getFieldStatsInfo();

                                     FieldStatsInfoinfo2 = info.get("price");

                                     Map<String,List<FieldStatsInfo>> facets = info2.getFacets();

                                     list= facets.get("sendTime");

                                     for(inti=0;i<list.size();i++){     

                                               FieldStatsInfofieldStatsInfo = list.get(i);

                                               System.out.println("交易结果"+fieldStatsInfo.getName()+":"+fieldStatsInfo.getSum());

                                              

                                     }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值