我有一个用例,其中我需要过滤方面的汇总值。
分面过滤器允许吗?
示例: 获取大于国家/地区分组的大于0的数字字段的总和
所以我的杰森面看起来像
json.facet={cty:{type:terms,field:country,facet:{sum_value:”sum(population)”}}}
在上述请求中,我需要添加一个过滤器以仅返回其中sum_value is >100
答案 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