美文网首页
solr facet java分组统计

solr facet java分组统计

作者: 10676 | 来源:发表于2021-11-16 09:34 被阅读0次

跟你们一样,网上找了一大堆,结果要么报错要么死循环不知所以,于是放弃了,自己写一手


facet:就是图上的左侧红框
 SolrQuery solrQuery = new SolrQuery();

clCategoryOne和sbCategoryOne是我要查询的两个分类

  solrQuery.setFacet(true);
  solrQuery.addFacetField("clCategoryOne");
  solrQuery.addFacetField("sbCategoryOne");

解析这个分类

List<FacetField> filed = queryResponse.getFacetFields();
  for (FacetField f : queryResponse.getFacetFields()) {
               System.out.println("name1:" + f.getName() + " | value1:" + f.getValueCount()+" | values: "+f.getValues()+" | class: "+f.getClass());
           }

结果如图:


image.png
name1:clCategoryOne | value1:2 | values: [哲学、宗教 (1), 马克思主义、列宁主义、毛泽东思想、邓小平理论 (1)] | class: class org.apache.solr.client.solrj.response.FacetField
name1:sbCategoryOne | value1:2 | values: [数学 (1), 英语 (1)] | class: class org.apache.solr.client.solrj.response.FacetField

然后根据这个结论可写出如下完整逻辑:

           //获取分类
           List<FacetField> filed = queryResponse.getFacetFields();
           Map<String,Object> filedMap = new HashMap<>();
           for (FacetField f : queryResponse.getFacetFields()) {
               System.out.println("name1:" + f.getName() + " | value1:" + f.getValueCount()+" | values: "+f.getValues()+" | class: "+f.getClass());
               List<FacetField.Count> countList =  f.getValues();
               List<String> filedList = new ArrayList<>();
               for(int i=0;i<countList.size();i++){
                   System.out.println("1:" + countList.get(i).getName() + " | 2:" + countList.get(i).getAsFilterQuery()+" | 3: "+countList.get(i).getCount()+" | 4: "+countList.get(i).getFacetField());
                   String num = Long.toString(countList.get(i).getCount());
                   String named = countList.get(i).getName() + " " +  num;
                   filedList.add(named);
               }

               filedMap.put(f.getName()+" "+f.getValueCount(),filedList);

           }


           res.put("filed",filedMap);
       res.put("page",page);

       return Result.OK(res);

本文至此已经完成基本教学,因个人代码的特殊性,存在多级分类,所以封装了一手,看得懂的可以借鉴一下以下代码块:
控制器模块:


       //获取分类
       solrQuery.setFacet(true);
       //默认初始值 clCategory-中图分类初始值,clCategorySub中图分类下级初始值;sbCategory学科分类初始值,sbCategorySub-学科分类下级初始值
       String clCategory = "clCategoryOne";
       String clCategorySub = "clCategoryTwo";
       String sbCategory = "sbCategoryOne";
       String sbCategorySub = "sbCategoryTwo";
       if( null != bookSolrEntity.getClCategoryOne() || "" != bookSolrEntity.getClCategoryOne()){
           clCategory = "clCategoryOne";
           clCategorySub = "clCategoryTwo";
       }else if( null != bookSolrEntity.getClCategoryTwo() || "" != bookSolrEntity.getClCategoryTwo()){
           clCategory = "clCategoryTwo";
           clCategorySub = "clCategoryThree";
       }else if( null != bookSolrEntity.getClCategoryThree() || "" != bookSolrEntity.getClCategoryThree()){
           clCategory = "clCategoryThree";
           clCategorySub = "clCategoryfour";
       }else if( null != bookSolrEntity.getClCategoryFour() || "" != bookSolrEntity.getClCategoryFour()){
           clCategory = "clCategoryThree";
           clCategorySub = "clCategoryfour";
       }

       if( null != bookSolrEntity.getSbCategoryOne() || "" != bookSolrEntity.getSbCategoryOne()){
           sbCategory = "sbCategoryOne";
           sbCategorySub = "sbCategoryTwo";
       }else if( null != bookSolrEntity.getSbCategoryTwo() || "" != bookSolrEntity.getSbCategoryTwo()){
           sbCategory = "sbCategoryTwo";
           sbCategorySub = "sbCategoryThree";
       }else if( null != bookSolrEntity.getSbCategoryThree() || "" != bookSolrEntity.getSbCategoryThree()){
           sbCategory = "sbCategoryThree";
           sbCategorySub = "sbCategoryfour";
       }else if( null != bookSolrEntity.getSbCategoryFour() || "" != bookSolrEntity.getSbCategoryFour()){
           sbCategory = "sbCategoryThree";
           sbCategorySub = "sbCategoryfour";
       }
       solrQuery.addFacetField(clCategory);
       solrQuery.addFacetField(sbCategory);

分类逻辑处理:

  //获取分类
           List<FacetField> filed = queryResponse.getFacetFields();

           List<DjSolrSeachrDto> filedData= new ArrayList<>();
//           Map<String,Object> filedMap = new HashMap<>();
           for (FacetField f : queryResponse.getFacetFields()) {
               DjSolrSeachrDto djSolrSeachrDtolei = new DjSolrSeachrDto();
               //System.out.println("name1:" + f.getName() + " | value1:" + f.getValueCount()+" | values: "+f.getValues()+" | class: "+f.getClass());

               List<FacetField.Count> countList =  f.getValues();
               List<DjSolrSeachrDto> filedList = new ArrayList<>();
               DjSolrSeachrDto djSolrSeachrDto = new DjSolrSeachrDto();
               for(int i=0;i<countList.size();i++){
                   //System.out.println("1:" + countList.get(i).getName() + " | 2:" + countList.get(i).getAsFilterQuery()+" | 3: "+countList.get(i).getCount()+" | 4: "+countList.get(i).getFacetField());
                   djSolrSeachrDto = new DjSolrSeachrDto();
                   String num = Long.toString(countList.get(i).getCount());
                   String str = countList.get(i).getAsFilterQuery();
                   str = str.substring(0,str.indexOf(":"));
                   if(str.equals(sbCategory)){
                       djSolrSeachrDto.setCatKeys(sbCategorySub);
                   }else if(str.equals(clCategory)){
                       djSolrSeachrDto.setCatKeys(clCategorySub);
                   }
                   djSolrSeachrDto.setCatName(countList.get(i).getName());
                   djSolrSeachrDto.setCatNum(num);
                   filedList.add(djSolrSeachrDto);
               }

               if(f.getName().equals(sbCategory)){
                   djSolrSeachrDtolei.setCatKeys(sbCategory);
               }else if(f.getName().equals(clCategory)){
                   djSolrSeachrDtolei.setCatKeys(clCategory);
               }
               djSolrSeachrDtolei.setCatName(f.getName());
               djSolrSeachrDtolei.setCatNum(Integer.toString(f.getValueCount()));
               djSolrSeachrDtolei.setCatList(filedList);
               filedData.add(djSolrSeachrDtolei);

//               filedMap.put(f.getName()+" "+f.getValueCount(),filedList);

           }


//           res.put("filed",filedMap);
           res.put("fileData",filedData);

Dto模块

package org.jeecg.modules.webapi.pc.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @Description: dj_book
 * @Author: jeecg-boot
 * @Date:   2021-10-28
 * @Version: V1.0
 */
@Data
@Accessors(chain = true)
@ApiModel(value="dj_book_dto", description="图书分类出版社查询参数传递")
public class DjSolrSeachrDto implements Serializable {
    /**分类key*/
    @ApiModelProperty(value = "分类key")
    private String catKeys;
    /**分类名字*/
    @ApiModelProperty(value = "分类名字")
    private String catName;
    /**结果数量*/
    @ApiModelProperty(value = "结果数量")
    private String catNum;
    /**分类Id数组*/
    private java.util.List catList;
    /**分类leve*/
    @ApiModelProperty(value = "分类leve")
    private String leve;

}

相关文章

  • solr facet java分组统计

    跟你们一样,网上找了一大堆,结果要么报错要么死循环不知所以,于是放弃了,自己写一手 clCategoryOne和s...

  • sunspot-solr中的数量统计: facet

    在使用solr过后,各种搜索都会变快很多,而solr却不怎么支持统计功能,只找到一个数量的统计,facet,简单的...

  • Solr的Facet优化

    这两周一直奋斗在一个有4亿条(200G)数据的项目当中,需求是需要快速的对数据进行检索和Facet/Group。 ...

  • solr分组查询

    facet搜索 group搜索 solr的group搜索 按组查询的字段不能是int类型,必须是string类型,...

  • Solr分组查询

    facet搜索 group搜索 solr的group搜索 按组查询的字段不能是int类型,必须是string类型,...

  • Solr高级搜索一_Facet

    这里先偷个懒,参考一下别人的说明,个人还没有过尝试https://blog.csdn.net/liuweitoo/...

  • solr系列1——solr入门

    solr 搭建(基于4.10.3) 结合 Tomcat ,java 操作 solr 下载solr包http://a...

  • (转)学习Java8数据流List转为Map、分组、统计等操作集

    转:Java8数据流 分享:Java8集合排序 Java8java8--List转为Map、分组、统计等操作

  • elasticsearch java聚合api

    elasticsearch java聚合api使用(多字段分组统计、聚合,最大最小值) elasticsearch...

  • Python 分组分析

    分组统计函数: groupby(by=【分组列1,分组列2,...】) [统计列1,统计列2,...] .agg(...

网友评论

      本文标题:solr facet java分组统计

      本文链接:https://www.haomeiwen.com/subject/lvthtrtx.html