【问题标题】:Solr-Filter on Json Facet aggregation关于 Json Facet 聚合的 Solr-Filter
【发布时间】:2020-04-14 20:25:22
【问题描述】:

我有一个用例,我需要从方面过滤聚合值。

分面过滤器是否允许这样做?

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

所以我的杰森方面看起来像

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

在上述请求中,我需要添加一个过滤器以仅返回 sum_value is >100 的那些 cty 存储桶

【问题讨论】:

    标签: apache solr


    【解决方案1】:

    好吧,我们之前也遇到过类似的任务,我想说 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 字段。此外,通过不进行实时聚合,您将节省大量时间。

    【讨论】:

      【解决方案2】:

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

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

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

      Source

      【讨论】:

        猜你喜欢
        • 2016-06-21
        • 2018-10-21
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2019-01-14
        • 2020-11-09
        相关资源
        最近更新 更多