zoukankan      html  css  js  c++  java
  • solr+solrJ facet.pivot 用法实例

    1、要实现的功能

              

    2、索引中字段

          

    3、solr搜索

    4、solr结果

    {
      "responseHeader":{
        "status":0,
        "QTime":0,
        "params":{
          "facet":"true",
          "indent":"true",
          "q":"shop_id:123",
          "wt":"json",
          "facet.pivot":"p_type_name,type_name",
          "rows":"1"}},
      "response":{"numFound":15,"start":0,"docs":[
          {
            "add_description":"                                                                                        天然美白精华液,天然水果提取的VC成分同时配合绿茶抗氧化成分,抑制黑色素生成,促进肌肤胶原蛋白的合成,预防斑点生成,亮白肤色同时收敛毛孔,让皮肤变得洁净亮白更加紧致透明,充满弹力
                                                
                                                ",
            "type_one":"00010",
            "brand_name":"It's  skin 伊思",
            "sug":["It's  skin 伊思",
              "精华",
              "itsskin 伊思10倍VC美白精华原液"],
            "id":"214",
            "share_number":0,
            "rank":0,
            "brand_thumb":"http://n.baai.com/baai/uploadfile/2015/06/26/201506261520194805.jpg",
            "total_num":100,
            "discuss_number":0,
            "sales":4,
            "p_type_name":"护肤",
            "name":"itsskin 伊思10倍VC美白精华原液",
            "name_autocomplete":"itsskin 伊思10倍VC美白精华原液",
            "type_three":"00011",
            "rebate":100,
            "save_number":1,
            "love_number":0,
            "shop_id":123,
            "brand_id":153,
            "code":"000100010000011",
            "page_view":128,
            "type_id":404,
            "type_parent":350,
            "price":10000,
            "price_c":"10000,USD",
            "type_name":"精华",
            "suggestion":"itsskin 伊思10倍VC美白精华原液",
            "p_id":214,
            "type_two":"0001000100",
            "thumb":"http://n.baai.com/baai/uploadfile/2015/07/18/20150718141410960.jpg",
            "_version_":1508018604938887168}]
      },
      "facet_counts":{
        "facet_queries":{},
        "facet_fields":{},
        "facet_dates":{},
        "facet_ranges":{},
        "facet_pivot":{
          "p_type_name,type_name":[{
              "field":"p_type_name",
              "value":"护肤",
              "count":13,
              "pivot":[{
                  "field":"type_name",
                  "value":"乳液",
                  "count":2},
                {
                  "field":"type_name",
                  "value":"化妆水",
                  "count":2},
                {
                  "field":"type_name",
                  "value":"眼霜",
                  "count":2},
                {
                  "field":"type_name",
                  "value":"精华",
                  "count":2},
                {
                  "field":"type_name",
                  "value":"面膜",
                  "count":2},
                {
                  "field":"type_name",
                  "value":"面霜",
                  "count":2},
                {
                  "field":"type_name",
                  "value":"洁面",
                  "count":1}]},
            {
              "field":"p_type_name",
              "value":"彩妆",
              "count":2,
              "pivot":[{
                  "field":"type_name",
                  "value":"BB霜",
                  "count":2}]}]}}}

    5、solrJ实现

       
    	public   List<SearchType>  getTypeTree(Integer type,String name) throws SolrServerException{
    		SolrServer solrServer = SolrServerManger.getInstance();
            SolrQuery sQuery = new SolrQuery();
            List<SearchType> types=new ArrayList<SearchType>();
                sQuery.setFacet(true);
                sQuery.add("facet.pivot", "p_type_name,type_name");        //根据这两维度来分组查询
                switch (type) {
    			case 1:
    				sQuery.setQuery("name:"+name);
    				break;
    			case 2:
    				sQuery.setQuery("shop_id:"+name);
    				break;
    			default:
    				sQuery.setQuery("*:*");
    				break;
    			}
                QueryResponse response = solrServer.query(sQuery);
                NamedList<List<PivotField>> namedList = response.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){
                            	SearchType typeTwo=new SearchType();
                            	typeTwo.setName(pivot.getValue().toString());
                                List<PivotField> fieldList = pivot.getPivot();
                                if(fieldList != null){
                                   List<SearchType> typeThrees=new ArrayList<SearchType>();
                                    for(PivotField field:fieldList){
                                    	 SearchType typeThree=new SearchType();
                                    	 typeThree.setName(field.getValue().toString());
                                    	 typeThrees.add(typeThree);
                                    }
                                    typeTwo.setSubTypes(typeThrees);
                                    types.add(typeTwo);
                                }
    
                            }
                        }
                    }
                }
            return types;
    	}

    6、solrj测试代码

    	public static void main(String  [] args) throws SolrServerException{
    		List<SearchType> types=getTypeTree(2, "123");
    		for(SearchType t:types){
    			System.err.println(t.getName()+"===========");
    			for(SearchType tt:t.getSubTypes()){
    				System.err.println("   ---"+tt.getName());
    			}
    		}
    
    	}

    7、测试结果




  • 相关阅读:
    iOS 检测版本更新(02)
    iOS开发之检查更新
    Core Location :⽤用于地理定位
    TCP与UDP区别
    iOS设计模式之观察者模式
    联系人案例
    ksoap调用webservice
    Android获取内置sdcard跟外置sdcard路径
    百度sdk定位不成功,关闭定位
    PinnedHeaderListView实现删除
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023414.html
Copyright © 2011-2022 走看看