Solr Facet Pivot 的二维统计

震秦 发布于 2013/04/16 12:01
阅读 1K+
收藏 0

@张浩春 你好,想跟你请教个问题:我在做Solr的时候和你遇到了相同的问题。

有A B C   三个字段,我要统计A为某一个值时,facet.pivot=B,C。

query.addFacetField("ENTITY_SECTION_URN”, “SERVICE_TYPE_URN"); 它分别统计了两者,我要的不是这样的。

我需要的二维统计,相当于数据库中的Group By 后边2个字段,的功能。

不知道你怎么解决的,目前我还不理解Solr 的Facet Pivot,能否告知?

也希望广大同行不吝赐教。

//下面是我的代码,不知道怎么写?
try {
                query.setFacet(true);
                query.set("indent", true);
                query.addFacetPivotField("ENTITY_SECTION_URN,SERVICE_TYPE_URN");
                query.setFacetMinCount(1);
                query.setRows(0);

            } catch (Exception e) {
                log.warn(ExceptionUtils.getFullStackTrace(e));
                response = new Response<SolrFacetResult>(null);
                response.setSuccess(false);
                response.setError(e.getMessage());
                return response;
            }

加载中
0
tianpeng91
tianpeng91
不知道你是不是想要,当A为某个值时,先按B分面再按C分面?
0
震秦
震秦

引用来自“张浩春”的答案

不知道你是不是想要,当A为某个值时,先按B分面再按C分面?

是的。他们应该是有联系的,就像双主键一样。如:

field1, field2, count

abc,  123       10

abc,  234        8

bcd, 123        20

这样的结果集。

0
tianpeng91
tianpeng91
SolrQuery query = new SolrQuery();
query.setQuery("A:value");
query.setFacet(true);
query.setFacetLimit(size);
query.setParam("facet.pivot","b,c");
query.setParam("indent", true);
这样不就搞定了么?
0
tianpeng91
tianpeng91
不过他返回的数据和数据库不一样,是JSONArray中嵌套JSONArray,不知道你明白不?
0
震秦
震秦

引用来自“张浩春”的答案

SolrQuery query = new SolrQuery();
query.setQuery("A:value");
query.setFacet(true);
query.setFacetLimit(size);
query.setParam("facet.pivot","b,c");
query.setParam("indent", true);
这样不就搞定了么?
我先试试
0
震秦
震秦

引用来自“张浩春”的答案

SolrQuery query = new SolrQuery();
query.setQuery("A:value");
query.setFacet(true);
query.setFacetLimit(size);
query.setParam("facet.pivot","b,c");
query.setParam("indent", true);
这样不就搞定了么?

我简直无奈了。我的弄不出来,搜索都是有数据的。Facet却没有数据, 郁闷了。

@Test
    public void facetPostComment() throws Exception {
        SolrQuery query = null;
        // 正常的传入必要的时间条件,目前先放置着
        try {
            query = new SolrQuery("SERVICE_TYPE_URN:" + 285852);
            query.setFacet(true);
            query.set("indent", true);
            query.add("facet.pivot", "POST_GROUP_ID,SERVICE_TYPE_URN");
            query.setFacetMinCount(1);
            query.setRows(5);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(query);
        QueryResponse solrResponse = null;
        try {
            solrResponse = postSolrServer.query(query);
            System.out.println(solrResponse);
            System.out.println(solrResponse.getFacetPivot());
        } catch (SolrServerException e) {
            e.printStackTrace();
        }
    }
结果:

q=SERVICE_TYPE_URN%3A285852&facet=true&indent=true&facet.pivot=POST_GROUP_ID%2CSERVICE_TYPE_URN&facet.mincount=1&rows=5
{responseHeader={status=0,QTime=13,params={facet=true,indent=true,facet.mincount=1,wt=javabin,rows=5,version=2,q=SERVICE_TYPE_URN:285852,facet.pivot=POST_GROUP_ID,SERVICE_TYPE_URN}},response={numFound=554915,start=0,maxScore=2.0576153,docs=[SolrDocument{POST_URN=15175342_3118393, POST_ID=15175342, CREATED_AT=Thu Mar 07 00:00:00 CST 2013, USER_ID=1381152****, USER_SCREEN_NAME=1381152****, ENTITY_SECTION_URN=3118393, SERVICE_TYPE_URN=285852, POST_TITLE=一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般一般般, POST_GROUP_ID=74441, POST_TYPE=1001, CNT_READ=0, CNT_REPLIED=0, CNT_FORWARDED=0, CNT_FAVORITED=0, DW_CREATED_AT=Sun Apr 07 19:09:58 CST 2013, T_TOPICS=[2483535_3140862_0_0], FLAG_DBL=3.0, COMBO_KEY=36258560024150, _version_=1431655414536077312}, SolrDocument{POST_URN=15187626_3118393, POST_ID=15187626, CREATED_AT=Thu Mar 07 00:00:00 CST 2013, USER_ID=_ceair80476****, USER_SCREEN_NAME=_ceair80476****, ENTITY_SECTION_URN=3118393, SERVICE_TYPE_URN=285852, POST_TITLE=第二次入住,总体感觉尚可,性价比较高。为空调事宜联系前台,服务员和维修人员很快到场,服务到位。但离店前夜告知前台叫早,不知为何落空。结账时问询,既没有解释,也没有道歉。不该!, POST_GROUP_ID=78683, POST_TYPE=1001, CNT_READ=0, CNT_REPLIED=0, CNT_FORWARDED=0, CNT_FAVORITED=0, DW_CREATED_AT=Sun Apr 07 19:09:58 CST 2013, T_TOPICS=[2483535_3145104_0_0], FLAG_DBL=4.8, COMBO_KEY=36258560062376, _version_=1431655414597943296}, SolrDocument{POST_URN=15182415_3118393, POST_ID=15182415, CREATED_AT=Thu Mar 07 00:00:00 CST 2013, USER_ID=daichu****, USER_SCREEN_NAME=daichu****, ENTITY_SECTION_URN=3118393, SERVICE_TYPE_URN=285852, POST_TITLE=酒店附近交通还行,就是吃东西不太方便。, POST_GROUP_ID=68622, POST_TYPE=1001, CNT_READ=0, CNT_REPLIED=0, CNT_FORWARDED=0, CNT_FAVORITED=0, DW_CREATED_AT=Sun Apr 07 19:09:58 CST 2013, T_TOPICS=[2483535_3135043_0_0], FLAG_DBL=4.0, COMBO_KEY=36258560011147, _version_=1431655414623109120}, SolrDocument{POST_URN=15179708_3118393, POST_ID=15179708, CREATED_AT=Thu Mar 07 00:00:00 CST 2013, USER_ID=298600****, USER_SCREEN_NAME=298600****, ENTITY_SECTION_URN=3118393, SERVICE_TYPE_URN=285852, POST_TITLE=酒店位置比较偏僻,房间很大很安静,早餐不错, POST_GROUP_ID=67376, POST_TYPE=1001, CNT_READ=0, CNT_REPLIED=0, CNT_FORWARDED=0, CNT_FAVORITED=0, DW_CREATED_AT=Sun Apr 07 19:09:58 CST 2013, T_TOPICS=[2483535_3133797_0_0], FLAG_DBL=4.0, COMBO_KEY=36258560024168, _version_=1431655414667149312}, SolrDocument{POST_URN=15191122_3118393, POST_ID=15191122, CREATED_AT=Thu Mar 07 00:00:00 CST 2013, USER_ID=6702****, USER_SCREEN_NAME=6702****, ENTITY_SECTION_URN=3118393, SERVICE_TYPE_URN=285852, POST_TITLE=早餐很好,房间设施完备,无线网络速度较慢, POST_GROUP_ID=74252, POST_TYPE=1001, CNT_READ=0, CNT_REPLIED=0, CNT_FORWARDED=0, CNT_FAVORITED=0, DW_CREATED_AT=Sun Apr 07 19:09:59 CST 2013, T_TOPICS=[2483535_3140673_0_0], FLAG_DBL=4.3, COMBO_KEY=36258560062309, _version_=1431655414798221312}]},facet_counts={facet_queries={},facet_fields={},facet_dates={},facet_ranges={}}}
null

0
tianpeng91
tianpeng91
对了,你加句query.setRows(0);
0
tianpeng91
tianpeng91
算了,你加我QQ,直接聊吧,这样很蛋疼,759869747
0
makeret
makeret

这个问题解决了没,楼主,我也遇到同样的问题

震秦
震秦
时间太长, 已遗忘。
返回顶部
顶部