zoukankan      html  css  js  c++  java
  • 8.solr学习速成之FacetPivot

    什么是Facet.pivot

     Facet.pivot就是按照多个维度进行分组查询,是Facet的加强,在实际运用中经常用到,一个典型的例子就是商品目录树
    NamedList解释:
    NamedList,一个有序的name/value容器,NamedList不像Map,他具有以下特点:
          1、名字可以重复
          2、NamedList中的element保持这有序状态
          3、可以下标的形式访问Elements
          4、name和value都可以为null
    package com.liucheng.solr;
    import java.io.IOException;
    import java.util.List;
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrRequest;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    import org.apache.solr.client.solrj.response.PivotField;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.util.NamedList;
    public class FacetPivot {
        
        public static void facetPivotQuery(){
            HttpSolrClient server = solrServer.getServer();
            SolrQuery query = new SolrQuery();
            String para = "*:*";
            query.setFacet(true);
            query.add("facet.pivot", "major_s,subMajor_s,brand_s");//多维度分组查询
            query.setFacetLimit(100);//限制facet返回数量
            query.setQuery(para);
            try {
                QueryResponse queryResponse = server.query(query,SolrRequest.METHOD.POST);
                NamedList<List<PivotField>> namedList = queryResponse.getFacetPivot();
                if(namedList != null){
                    List<PivotField> pivotList = null;
                    for(int i=0;i<namedList.size();i++){
                        pivotList = namedList.getVal(i);
                        if(pivotList != null){
                            for(PivotField pivot : pivotList){
                                System.out.println("一级:"+pivot.getValue()+" "+pivot.getCount());
                                List<PivotField> fieldList = pivot.getPivot();
                                if(fieldList!=null){
                                    for(PivotField field : fieldList){
                                        System.out.println("2级:"+field.getValue()+" "+field.getCount());
                                        List<PivotField> fieldList1 = field.getPivot();
                                        if(fieldList1!=null){
                                            for(PivotField field1 : fieldList1){
                                                System.out.println("3级:"+field1.getValue()+" "+field1.getCount());
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static void main(String[] args) {
            facetPivotQuery();
        }
    }
    一级:无敌电器 1
    2级:无敌显示器 1
    3级:无敌海尔儿 1
    一级:电器 1
    2级:显示器 1
    3级:海尔儿 1
    一级:超级电器 1
    2级:超级显示器 1

    3级:超级海尔儿 1  

  • 相关阅读:
    js 性能调试
    js 面向对象编程
    js 零碎
    如果遇到二维数组 想取某个字段的和
    昨天写支付接口时遇到支付接口返回数据接收地址,session数据丢失(或者说失效)的问题
    mysql报错: 1548-Cannot load from mysql.proc. The table is probably corrupted 解决办法
    php 时间倒计时代码 个人写法 有好的想法的欢迎贴出来分享
    linux 环境下安装mysql5.6
    关于数据库连接不上 出现错误的问题
    推荐一个不错的css3网站 可以直接调用的
  • 原文地址:https://www.cnblogs.com/itliucheng/p/6898671.html
Copyright © 2011-2022 走看看