Json Facet聚合上的Solr-Filter

时间:2019-03-04 09:24:07

标签: apache solr

我有一个用例,其中我需要过滤方面的汇总值。

分面过滤器允许吗?

示例: 获取大于国家/地区分组的大于0的数字字段的总和

所以我的杰森面看起来像

json.facet={cty:{type:terms,field:country,facet:{sum_value:”sum(population)”}}}

在上述请求中,我需要添加一个过滤器以仅返回其中sum_value is >100

的那些cty存储桶

2 个答案:

答案 0 :(得分:0)

好吧,我们之前也面临过类似的任务,我想说Solr无法过滤计算的值。您可以通过将限制设置为-1来获取所有构面,然后需要在搜索应用程序上编写一些包装器(WEB API),以过滤构面列表。

json.facet={cty:{type:terms,field:country,limit:-1,facet:{sum_value:”sum(population)”}}}

或者您可以在编制索引之前预先计算每个国家的人口总数。请看下表。

|国家/地区|人口| Total_Population |

| C1 | 12 | 25 |
| C1 | 13 | 25 |
| C2 | 14 | 49 |
| C2 | 35 | 49 |

稍后,您可以使用过滤器查询直接在Total_Population字段中进行过滤。另外,通过不实时进行聚合,您将节省大量时间。

答案 1 :(得分:0)

Solr支持通过嵌套函数对构面进行排序。您可以根据自己的方面进行排序并限制响应。对于您的用例:

json.facet={
cty:{
    type:terms,
    field:country,
    sort: "sum_value desc"
    facet:
        {
            sum_value:”sum(population)”
        }
    }
}

您还可以通过limit = 100来过滤掉前100个sum_value

Source