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

如何在Solr中实现按物料分组并获取近两年最低单价?

用Solr实现按物料分组并获取近两年内最低价格文档

完全可以实现,借助Solr的**分组(Grouping)**功能结合过滤条件就能满足你的需求,以下是具体实现步骤:

核心查询参数

将以下参数拼接在Solr查询URL后(例如http://your-solr-url/solr/your-core/select?):

q=*:*
&fq=received_date_dt:[NOW-2YEAR TO NOW]
&group=true
&group.field=material_name_s
&group.sort=price_per_lb_value_f asc
&group.limit=1
&group.format=simple
&fl=material_name_s,company_name_s,price_per_lb_value_f,received_date_dt

参数说明

  • q=*:*:匹配所有文档,后续通过过滤条件缩小范围
  • fq=received_date_dt:[NOW-2YEAR TO NOW]:过滤出近两年内的记录,Solr支持用NOW表示当前服务器时间,NOW-2YEAR自动计算当前时间往前推2年的时间点;如果需要固定区间,可替换为具体日期,比如[2022-01-01T00:00:00Z TO 2024-01-01T00:00:00Z]
  • group=true:开启分组功能
  • group.field=material_name_s:指定按物料名称字段分组
  • group.sort=price_per_lb_value_f asc:每个分组内按价格升序排序,确保最低价格的文档排在分组内第一位
  • group.limit=1:每个分组仅返回第一条结果(即最低价格的记录)
  • group.format=simple:将分组结果合并到response.docs中,结构更贴近你期望的输出
  • fl:指定返回的字段列表,只保留业务需要的字段,减少数据传输量

示例返回结果

执行上述查询后,返回结果结构会与你期望的一致:

{"response": {"numFound": 2, "start": 0, "numFoundExact": true, "docs": [
    {"material_name_s":"MaterialName1", "company_name_s": "CompanyName3", "price_per_lb_value_f": 3.33, "received_date_dt": "2021-01-01T00:00:00Z"},
    {"material_name_s":"MaterialName2", "company_name_s": "CompanyName2", "price_per_lb_value_f": 5.55, "received_date_dt": "2021-01-01T00:00:00Z"}
]}}

注意事项

  • 确保received_date_dt字段在Solr schema中配置为date类型,否则时间范围查询无法生效
  • 确保material_name_s字段的indexed属性设置为true,否则无法作为分组字段使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:50:16