You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Solr的JSON Facets获取Terms Facet的占比数据?

实现Solr Terms Facet各值的占比统计

嘿,这个需求确实直接,用Solr的JSON Facet就能轻松搞定,核心是借助全局统计的总文档数,来计算每个分桶的占比。下面是具体的实现方案:

完整查询示例

你可以发送这样的Solr查询请求(替换your_core为你的实际核心名称):

GET /solr/your_core/select?q=*:*&rows=0&json.facet={
  "count": "count(*)",
  "myTerms": {
    "type": "terms",
    "field": "myTerm",
    "buckets": [
      {
        "val": "val",
        "count": "count",
        "percent": "div(multiply(count, 100), $count)"
      }
    ]
  }
}

关键部分解释

  • q=*:*:匹配所有文档,你可以根据业务需求修改为具体的查询条件(比如某些过滤条件)
  • rows=0:不需要返回具体文档内容,只保留统计结果,提升查询效率
  • count:"count(*)":计算当前查询匹配到的总文档数,这个值会作为全局变量$count,供后续分桶计算使用
  • myTerms:自定义的terms facet,指定统计字段为myTerm
  • 分桶自定义字段:
    • val": "val":返回当前分桶的取值(比如"OK"或"KO")
    • count": "count":返回当前分桶的文档数量
    • percent": "div(multiply(count, 100), $count)":通过Solr的数学表达式计算占比——用当前分桶的文档数乘以100,再除以总文档数,得到百分比

可选优化:整数百分比

如果需要返回整数形式的百分比(比如40而非40.0),可以用floor或ceil函数对结果取整:

"percent": "floor(div(multiply(count, 100), $count))"

预期返回结果

执行上述查询后,你会得到类似这样的结果,完全符合你的需求:

{
  "response": {
    "numFound": 100,
    "start": 0,
    "docs": []
  },
  "facets": {
    "count": 100,
    "myTerms": {
      "buckets": [
        {
          "val": "OK",
          "count": 40,
          "percent": 40.0
        },
        {
          "val": "KO",
          "count": 60,
          "percent": 60.0
        }
      ]
    }
  }
}

内容的提问来源于stack exchange,提问作者Davide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:02:27