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

存储指定时段文档出现次数:Solr字段类型与存储格式咨询

基于Solr实现指定时间段文档出现次数统计的方案

核心字段设计

首先需要定义两个关键字段支撑统计需求:

  • doc_unique_id:字段类型为string(精确匹配、不分词),用于标记重复文档的唯一标识,确保相同文档拥有完全一致的ID值。
  • doc_date:字段类型为date,存储文档被处理的ISO 8601格式日期时间(例如2022-10-16T00:00:00Z),支持后续日期范围过滤与时间维度聚合。

Schema定义示例:

<field name="doc_unique_id" type="string" indexed="true" stored="true"/>
<field name="doc_date" type="date" indexed="true" stored="true"/>

两种实现统计的方式

方式1:查询时实时聚合(推荐)

无需预先存储次数,直接利用Solr的Facet聚合功能,在查询时实时计算指定时间段内各文档的出现次数,灵活性拉满,完全适配任意日期/时间段的统计需求。

查询单日(2022/10/16)出现次数最多的文档:

q=*:*
&fq=doc_date:[2022-10-16T00:00:00Z TO 2022-10-16T23:59:59Z]
&facet=true
&facet.field=doc_unique_id
&facet.limit=10  # 控制返回前N个高频文档
&facet.sort=count desc

查询时间段(2022/10/16~2022/10/23)出现次数最多的文档:

q=*:*
&fq=doc_date:[2022-10-16T00:00:00Z TO 2022-10-23T23:59:59Z]
&facet=true
&facet.field=doc_unique_id
&facet.limit=10
&facet.sort=count desc

优势:无需额外维护计数逻辑,支持任意时间段统计;每日数千文档的量级下,性能完全够用。

方式2:预先存储每日计数(仅适用于固定日期维度场景)

如果对查询性能有极致要求,可以预先在Solr中存储每个文档的每日出现次数,通过动态字段实现:

  • 定义动态字段date_count_*,类型为int,用于存储对应日期的次数(例如date_count_20221016对应2022-10-16的次数)。
  • 每日处理文档时,使用Solr的Atomic Update功能累加对应日期的计数:
    curl -X POST -H "Content-Type: application/json" http://solr-host:8983/solr/collection/update -d '
    [
      {
        "doc_unique_id": "DOC123",
        "date_count_20221016": {"inc": 1}
      }
    ]
    '
    

缺点:维护成本高,仅支持单日期统计,跨时间段统计需要手动累加多个字段值,灵活性不足。

字段类型说明

  • string类型:确保doc_unique_id的精确匹配,避免分词导致的重复文档识别错误。
  • date类型:原生支持范围查询、排序,是处理时间维度需求的最优选择,存储时必须遵循ISO 8601格式(简化的2022-10-16格式也可被Solr自动解析为当天0点)。
  • int类型:用于预先存储计数时,保证数值存储的高效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:00:57