【Solr4.7.0学习笔记】系列之一:Facet分组查询

本文详细介绍了如何利用Facet功能在Solr中进行分组统计查询,包括配置文件修改、Java代码实现及具体步骤解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
要求:输入“年级”可以统计出A表里面的“上地实验小学一年级(4条)上地实验小学二年级(2条)”
分析思路:既要查询又要分组,而分组和查询最好分开写。所以你可以申明两个域,指向同一个字段一个用来查询,一个用来统计。再加上涉及到两张表,所以需要一个表连接查询。
第一步:修改配置文件schema.xml
这个uniquekey不能重复,classid在A表里面有重复。不可以
第二步:修改mysql-data-config.xml
 
第三步:java代码
// solrj对Facet的支持,实现分组统计
     public List<Classify> testFacet(String name, int i){  
          List<Classify> list= new ArrayList<Classify>();
          Classify cEntity= null;
           try {
           HttpSolrServer server=SolrServer.getInstance ().getServer ();         
           //智能分词-----------------------
                   CharTermAttribute ta= null;   
                   String params= "";
                    try {              
                        IKAnalyzer analyzer = new IKAnalyzer();        
                         //使用智能分词
                        analyzer.setUseSmart( true);
                        TokenStream Stream = analyzer.tokenStream("className" , new StringReader(name));         
                        ta=Stream.addAttribute(CharTermAttribute. class);
                        Stream.reset();              
                         for (;Stream.incrementToken(); ) {                            
                             params += "className:"+ta+" OR ";                   
                        }
                        Stream.end();
                   } catch (IOException e1) {            
                        e1.printStackTrace();
                   }
          SolrQuery query = new SolrQuery();
          query.setQuery("className:"+name);         
          String para= "";
           if(params != null){
               if (params.lastIndexOf("OR" ) != -1)
                   params= params.substring(0,params.lastIndexOf("OR" ));
              para=params;
          }    
          query.set( "q",para);
          query.setRows(0);
          query.setFacet( true);//设置facet=on             
          query.addFacetField(new String[] {"cname" });//设置需要facet的字段       
          query.setFacetLimit(100); //限制facet返回的数量
          QueryResponse response = server.query(query);          
          List<FacetField> facets = response.getFacetFields();//返回的facet列表     
           for (FacetField facet : facets) {     
              List<Count> counts = facet.getValues();
               for (Count count : counts) {
                   cEntity= new Classify();           
                   System. out.println(count.getName() + ":" + count.getCount());//他是按照term去统计的                 
                   cEntity.setClassname(count.getName()+"("+count.getCount()+"条" +")" );//是出现的doc数
                   list.add(cEntity);
              }
              System. out.println();
          }
          } catch (SolrServerException e) {     
              e.printStackTrace();
          }    
           return list;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值